2

当谈到 C++ 中的 const 类型时,我总是迷失方向,而我的问题本质上与这些有关。

我有以下情况:我有一个类 Matrix 本质上是一个二维链表(带有标记的环)和一个类似迭代器的类,它可以选择一行(选择一行的方法)然后通过它(运算符++)。为了获得它,迭代器存储了 3 个指针:主标记、选定子列表(行)的标记和当前选定的节点(我们将其命名为插入符号)。如果 operator++ 命中子列表哨兵 - 则到达行的末尾,如果行选择命中主哨兵,那么我们已经到达矩阵的末尾。

现在,由于列表是单链接的,并且我希望迭代器提供删除功能,因此我决定将Node**当前节点字段的类型存储在迭代器中。但这会给构造函数带来一些问题。

我决定只允许两种类型的构造函数——一种采用 Matrix,另一种采用其他迭代器。这是我的问题。从矩阵创建的迭代器的初始状态具有其所有指针在同一点 - 主哨兵。现在,从 g++ 告诉我的内容看来,我的构造函数Matrix必须采用 type const Matrix&。但如果是这样,我不能为我的插入符号(作为Node**)分配指向 Matrix 自己的指针的指针,因为它是 const 而插入符号不能是 const。

我怎么可能解决这个问题?为什么构造函数不能采用非常量实体?我可以在构造函数中将我的矩阵从常量转换为非常量吗?提前感谢您对此的任何提示。

4

1 回答 1

1

您必须将 Matrix 和迭代器分开,以便仅迭代不会以任何方式更改 Matrix,并且迭代所需的任何数据都存储在迭代器类中。

此外,如果您需要迭代器对 const Matrix 对象进行操作,您还需要提供一个 const 迭代器,然后它可以具有指向 Matrix 的 const 引用/指针。但是在复制构造函数中你不一定需要这个,你可以直接访问字段,毕竟它是同一个类。

要让迭代器类访问 Matrix 的内部,您可以使用friend关键字,或者(最好)您可以使迭代器类成为 Matrix 的内部类。

于 2012-12-14T19:48:02.847 回答