[英]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.