![](/img/trans.png)
[英]Random access iterators - does vector.end() - vector.begin() = vector.size() in C++;
[英]C++ vector.begin() and vector[0]
為什么這兩行打印不同的地址?
vector<int> v1{ 12,2,34 };
printf_s("%d - 0x%p\n", v1[0], &v1[0]);
printf_s("%d - 0x%p\n",*v1.begin(), v1.begin());
該地址中的值相同,但地址本身不同。 這是否意味着同一數組有兩個副本?
編輯 :在調試模式下它打印不同的地址,在發布模式下有相同的地址:)
v1.begin()
返回一個std::vector<int>::iterator
,它不一定是v1[0]
的地址。 實際上,嘗試使用printf
將其打印出來會給我一個警告:
警告:格式'%p'期望類型為'void *'的參數,但是參數3的類型為'std :: vector :: iterator`
除非您確定在特定的標准庫實現中並且使用當前的編譯選項std::vector<int>::iterator
是int*
的別名,否則比較是沒有意義的。
對於矢量對象v1:
&V[0]
是對象v1的第一個元素的地址。
當我們創建一個迭代例如vector<>::iterator iter
的iter
本身是一個其他對象,因為這在解釋文件 。
迭代器:類似指針的對象,可以用++遞增,用*取消引用,然后與!=的另一個迭代器進行比較。
希望本參考手冊能詳細回答您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.