简体   繁体   English

std :: unordered_map的递增迭代器

[英]incrementing iterator of std::unordered_map

Why are lines 7 and 8 bad?? 为什么第7行和第8行不好? Why it's bad to in-/decrement some iterator? 为什么增加/减少某些迭代器很不好?

#include <unordered_map>

int main()
{
    std::unordered_multimap<int,int> myumm({{1,3},{3,2},{5,5},{0,9}});
    auto first = myumm.begin();
    auto second = first+1;      // bad
    auto third = --myumm.end(); // bad too
    auto fourth = myumm.end();
}

std::unordered_multimap offers Forward Iterators. std::unordered_multimap提供了正向迭代器。 These are iterators which you can assign, dereference, compare, and increment. 这些是迭代器,您可以分配,取消引用,比较和递增。

To be able to decrement an iterator ( --it ), you need at least a Bidirectional Iterator (such as offered by std::multimap ). 为了能够减少迭代器( --it ),您至少需要一个双向迭代器 (例如std::multimap )。

To be able to add (an arbitrary number) to an iterator ( it + 1 ), you need a Random Access Iterator (such as offered by std::vector ). 为了能够向迭代器( it + 1 )添加(任意数量),您需要一个随机访问迭代器 (例如std::vector提供的)。 To advance a weaker iterator by more than one place, use std::advance(it, 42) (for advancing it in place), or std::next(it, 42) (which returns the incremented copy and does not modify it ). 由一个以上的地方前进较弱的迭代,使用std::advance(it, 42)用于推进it在适当位置),或std::next(it, 42)它返回递增拷贝并且不修改it )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM