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