我正在制作自己的类似 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/