如果我有一个迭代器list<Tree_Node*>::iterator iter
,对于用户定义的类Tree_Node
,如何通过迭代器返回Tree_Node*
指向的对象?它基本上是指向指针的指针,不是吗?
答案 0 :(得分:0)
您取消引用迭代器以转到Tree_Node*
对象,然后取消引用以转到Tree_Node
:
**iter
我们假设您有一名成员Tree_Node::x
,您可以将其称为:
(**iter).x
(*iter)->x
它基本上是指向指针的指针,不是吗?
在C ++中,迭代器抽象旨在使API与指针非常相似......并不真正重视它们的实现方式,但对于许多容器来说,它将是一个指针。
答案 1 :(得分:0)
在C ++ 11中,您可以这样做:
for(auto node : tree)
cout << node->data;
或旧版本:
for(list<Tree_Node*>::iterator node = tree.begin(); node != tree.end(); node++)
cout << (*node)->data;
答案 2 :(得分:0)
它基本上是指向指针的指针,不是吗?
抽象是另一种方式:指针是一种特殊类型的迭代器(可能是迭代器的模型),而迭代器是一种抽象。但是你的结论是正确的,就像你可以做指针指针一样:
list<Tree_Node*>::iterator iter;
// assign something to iter
Tree_Node* ptr = *iter;
Tree_Node& node = *ptr;
或简短:
Tree_Node& node = **iter;