[英]Why I can't use `+1` in the iterator of `map` in c++?
我对在map
中使用的迭代器有疑问。 我有一个 map 类型为map<int, vector<int> > vpmap;
我想遍历整个 map。 然后我用
for (size_t i = 0; i < vpmap.size(); i++) {
{
auto it = vpmap.begin();
it++;
/*code*/
}
这很好。 但是当我将it++
替换为it=it+1
。 编译器给出错误。 在使用vector
之前,我没有收到此错误。 我想知道它的原因。
std::vector::iterator
是LegacyRandomAccessIterator 。 它需要支持操作it + 1
。
另一方面, std::map::iterator
是LegacyBidirectionalIterator 。 不需要支持it + 1
,但需要支持it++
和it--
。
来自不同帖子答案的相关细节:
这背后的原因是,将
N
添加到随机访问迭代器是恒定时间(例如,将N*sizeof(T)
添加到T*
),而对双向迭代器执行相同操作则需要应用++
N
次。
it
是std::map
的迭代器,它是双向迭代器,不支持operator+
。
RandomAccess Iterator支持operator+
,例如std::vector
的迭代器,这就是为什么你没有使用std::vector
得到这个错误的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.