84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
比如有如下代码:
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)