簡體   English   中英

獲取雙指針指向的對象

[英]Obtaining the object pointed to by a double pointer

如果我有一個迭代器list<Tree_Node*>::iterator iter ,對於用戶定義的類Tree_Node ,如何通過迭代器返回Tree_Node*指向的對象? 它基本上是指向指針的指針,不是嗎?

您取消引用迭代器以獲取Tree_Node*對象,然后取消引用該迭代器以獲取Tree_Node

**iter

假設您有一個成員Tree_Node::x ,則可以將其稱為:

(**iter).x
(*iter)->x

它基本上是指向指針的指針,不是嗎?

在C ++中,迭代器抽象的目的是使API具有類似於指針的作用……實際上,實現它們的方式並不重要,盡管對於許多容器而言,它將是一個指針。

在C ++ 11中,您將執行以下操作:

for(auto node : tree)
    cout << node->data;

或在舊版本中:

for(list<Tree_Node*>::iterator node = tree.begin(); node != tree.end(); node++)
    cout << (*node)->data;

它基本上是指向指針的指針,不是嗎?

抽象是另一種方式:指針是一種特殊類型的迭代器(以及大概是迭代器建模的對象),而迭代器是一種抽象。 但是您的結論是正確的,就像使用指針可以做的那樣:

list<Tree_Node*>::iterator iter;
// assign something to iter
Tree_Node* ptr = *iter;
Tree_Node& node = *ptr;

或簡稱:

Tree_Node& node = **iter;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM