获取双指针指向的对象

时间:2014-10-27 04:41:25

标签: c++ pointers iterator

如果我有一个迭代器list<Tree_Node*>::iterator iter,对于用户定义的类Tree_Node,如何通过迭代器返回Tree_Node*指向的对象?它基本上是指向指针的指针,不是吗?

3 个答案:

答案 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;