比如有如下代码:
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
Hou Jie が翻訳した「STL Source Code Analysis」を参照できます
&*tmp、またはstd :: addressof(*tmp)
一般に、イテレータは実際のデータ アドレスを内部メンバー変数に格納し、さまざまな演算子 (逆参照演算子
*
など) をオーバーロードするデータ構造です。データ アドレスを取得するには、推奨される方法は&*
です。つまり、最初にアスタリスク演算子 を介して実際のデータを取得し、 によってオーバーロードされる可能性があります。その後、アドレスを取得します。しかし、
vector<int>
の場合、実際にはtypedef int *iterator
なので、(int*)tmp
でも問題ありません。Hou Jie が翻訳した「STL Source Code Analysis」を参照できます
&*tmp、またはstd :: addressof(*tmp)