簡體   English   中英

C ++ vector.begin()和vector [0]

[英]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>::iteratorint*的別名,否則比較是沒有意義的。

對於矢量對象v1:

&V[0]是對象v1的第一個元素的地址。

當我們創建一個迭代例如vector<>::iterator iteriter本身是一個其他對象,因為這在解釋文件

迭代器:類似指針的對象,可以用++遞增,用*取消引用,然后與!=的另一個迭代器進行比較。

希望本參考手冊能詳細回答您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM