c++ - 树容器迭代器接口(interface)

标签 c++ stl iterator

我正在制作自己的类似 STL 的容器 - 具有任意数量子级的树

template<typename Type>
class Node
{
    Type value;
    Iterator AddChild(const Type & value);
    void Remove(const Iterator & where);
    ...
};

我决定迭代器的 operator*应该返回value当前节点,但应该返回 operator-> ?目前,它返回 Node<Type>*在这种情况下它非常有用

Node<int>::Iterator it = tree.begin();
it->AddChild(4);

但我的导师告诉我,operator->应该返回Type* 。访问 Node 方法的类似 STL 的方式是什么?类似 it.Ref().MyMethod()看起来不太好。

最佳答案

你的导师是对的,operator->()的返回类型应该是Type*

迭代器背后的重要思想是它们只是指向容器内某些位置的智能指针。您可以更改存储在该位置的值(通过分配给*it)或访问其成员,但要对容器内容进行更彻底的(即结构)更改,您必须直接访问容器本身。

这就是为什么在 STL 中,没有节点的方法。相反,容器的方法(以及算法)接受迭代器作为参数。

换句话说,STL 做你想做的事情的方式是:

Node<int>::Iterator it = tree.begin();
tree.AddChild(it, 4);

关于c++ - 树容器迭代器接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700518/

相关文章:

c++ - 给定一组点,找到与查询点曼哈顿距离最小的点

Java 字典迭代器类型问题

java - 我已经使用双向链表在 java 中实现了 Deque,当我调用 iterator.next 时,我得到一个空指针异常

c++ - 在类的构造函数中为常量动态大小数组赋值

c++ - 诸如 bits/vector.tcc 之类的头文件名是否符合标准?

c++ - 标准库容器的通用函数模板

c++ - 哪个 STL 容器用于相互关联的数据?

php - RecursiveDirectoryIterator 在 "Too many open files"上抛出 UnexpectedValueException

c++ - 使用 C++ 处理 iPhone 中的触摸检测?

C++:检查bmp文件是否合法