[英]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.