簡體   English   中英

為什么vector.begin()不等於&vector [0]?

[英]Why may vector.begin() not equal to &vector[0]?

這里指出http://www.parashift.com/c++-faq/vector-is-contiguous.html表示vector.begin()可能不等於&vector[0] 為什么以這種方式定義它。 什么阻止vector.begin()等於&vector[0]

vector的迭代器可以定義為某個類。 當成員函數返回迭代器時,它不必是指向數組的第一個元素的原始指針。 它可以是該類的一個對象。 只需要迭代器定義operator * ,它將返回對向量的第一個元素的引用,前提是向量不為空。

vector.begin()返回的迭代器在技術上只允許你通過dereference運算符獲取值。 那個解引用操作符可以在里面做各種各樣的事情。 大多數實現只是存儲一個指向T的指針 - 或者指向T的指針 - 然后在它們的解引用操作符中簡單地取消引用它,但這不是迭代器概念的要求。

請參閱: Iterator概念

如果我們有一個T型向量

vector<T> v;

然后

v.begin()&v[0]類型不同

v.begin()具有類型vector<T>::iterator (如果向量是非const)或vector<T>::const_iterator (如果向量是const)。

&vector[0]類型為T *

現在在一些實現中,向量迭代器被實現為指向T的指針。因此一些程序員假設向量迭代器與指向T的指針同義。這不受標准的支持。 在其他實現中,vector迭代器是一個類。

要形成指向向量中第N個元素的迭代器,應使用表達式(v.begin() + N)

要形成指向向量中第N個元素的指針,應使用表達式&v[N]

無論供應商如何實現向量迭代器,這些表達式都是有效的。 它們也適用於雙端和弦樂。

暫無
暫無

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

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