比如有如下代码:
vector<int>::iterator tmp = find(box.begin(), box.end(), 0);
我想知道tmp保存的地址是多少,应该怎么做呢?
人生最曼妙的风景,竟是内心的淡定与从容!
一般來說,迭代器是個資料結構,會將真實的資料位址保存在某個內部的成員變數中,並重載各種運算子(例如解引用運算子*)。要取得資料位址,建議的方法是&*,也就是先透過可能被重載過的星號運算子得到真實資料再取位址。
*
&*
但對於vector<int>,其實是typedef int *iterator,所以即使(int*)tmp也沒啥問題。
vector<int>
typedef int *iterator
(int*)tmp
可以參考侯捷翻譯的《STL源碼剖析》
&*tmp即可,或std::addressof(*tmp)
一般來說,迭代器是個資料結構,會將真實的資料位址保存在某個內部的成員變數中,並重載各種運算子(例如解引用運算子
*
)。要取得資料位址,建議的方法是&*
,也就是先透過可能被重載過的星號運算子得到真實資料再取位址。但對於
vector<int>
,其實是typedef int *iterator
,所以即使(int*)tmp
也沒啥問題。可以參考侯捷翻譯的《STL源碼剖析》
&*tmp即可,或std::addressof(*tmp)