簡體   English   中英

Vector::begin() 與 Array::begin()

[英]Vector:: begin() vs Array::begin()

我對迭代器感到困惑:

vector<int>::iterator first_vector = viktor.begin();

array<int,14> j = {7,3,4};

array<int,14>::iterator first_array= j.begin();

cout<<(first_vector); // Error
cout<<(first_array);  // Output :: 0xeb1ebff940

如圖所示,我試圖獲取迭代器指向的地址。 對於數組它可以工作,但是對於向量它不能,我收到了這個錯誤:

錯誤:'operator<<' 不匹配(操作數類型為'std::ostream' {aka 'std::basic_ostream<char>'} 和'std::vector<int>::iterator')

我在這里錯過了什么?

我嘗試使用&訪問向量迭代器,但據我所知,這只會返回first值保存在內存中的地址,而不是迭代器本身的地址。

迭代器旨在模仿指針,但它們實際上可能也可能不是指針。

對於std::vector (和大多數容器), iterator通常作為代理對象實現。 這就是您收到錯誤的原因,因為沒有為該代理定義operator<<

std::array的情況下, iterator通常被實現為原始指針,並且有一個默認的operator<<為原始指針定義。

如圖所示,我試圖獲取迭代器指向的地址。

正確的做法是取消對迭代器的引用,然后獲取引用項的地址,例如:

cout << &(*first_vector); // address of value being referred to
cout << &(*first_array); // address of value being referred to

我嘗試使用&訪問向量迭代器,但據我所知,這只會返回first值保存在內存中的地址,而不是迭代器本身的地址。

這是不正確的,恰恰相反。 在迭代器本身上使用&將獲得迭代器本身的地址,而不是迭代器引用的項的地址。

cout << &first_vector; // address of iterator itself
cout << &first_array; // address of iterator itself

暫無
暫無

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

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