簡體   English   中英

C ++ STL,我想知道雙向迭代器和map中的operator []之間有什么區別

[英]C++ STL, I wonder what is different between bidirectional iterator and operator[] in map

我了解到隨機訪問迭代器和雙向迭代器是不同的。 隨機訪問迭代器可以使用+, -, += , -=, []運算符,但不能使用雙向迭代器。 映射使用雙向迭代器。 但是map仍然使用[]運算符。

例如:

map<int,int> a;
a[5]++;

它運作良好。

我不知道該怎么辦。

碰巧,你能告訴我如何嗎?

指針支持[] ,其定義為p[i]等效於*(p + i) RandomAccessIterator的行為類似於指針,因此它們也具有相同的含義。

許多容器也支持[] 其中有兩種。

第一類是那些SequenceContainer小號誰的迭代器是RandomAccessIterator的 ,而參數SequenceContainer::operator[]std::size_t ,即一些識別元素由它的序列中的位置。 vec[i]vec.begin()[i]相同vec.begin()[i]*(vec.begin() + i)

如果您可以輕松找到特定索引處的元素,則可以輕松地將迭代器增加或減少大於1的偏移量。

第二類是那些AssociativeContainer S或UnorderedAssociativeContainers有A S mapped_type AssociativeContainer::operator[]的參數是AssociativeContainer::key_type ,即通過元素的值標識元素的東西。

輕松查找具有特定值的元素無助於沿序列移動。 事實證明,允許按值輕松訪問的當前已知數據結構並不善於知道哪個元素位於n后面。

隨機訪問迭代器可以使用+,-,+ =,-=,[]運算符,但不能使用雙向迭代器。

這太過簡單了,您已經找到了原因。

雙向迭代器不能執行隨機訪問操作 對於某些容器, []是隨機訪問操作。 它會將您帶入容器中的“距離”。

但是,對於像地圖這樣的關聯容器而言,並不是這樣:這是專門為這些容器設計的操作。 它需要一把鑰匙,並給您帶來價值 這是一個不同的操作。

嘗試根據特征行為而不是符號來思考,因為符號根據上下文具有不同的含義。 如果您想了解符號在某些給定上下文中的含義,可以參考參考文獻您的書

暫無
暫無

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

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