为什么我不能在 c++ 中"map"的迭代器中使用"+1"?

Why I can't use `+1` in the iterator of `map` in c++?

本文关键字:迭代器 map 不能 c++ 为什么      更新时间:2023-10-16

我在map中使用迭代器时遇到问题。我有一个类型为map<int, vector<int> > vpmap;的地图,我想循环浏览整个地图。然后我使用

for (size_t i = 0; i < vpmap.size(); i++) {
{
auto it = vpmap.begin();
it++;
/*code*/
}

这很好。但是当我将it++替换为it=it+1时。编译器给出了一个错误。我以前在使用vector时没有遇到过这个错误。我想知道原因。

std::vector::iteratorLegacyRandomAccessIterator。需要支持操作it + 1

另一方面,std::map::iterator是一个LegacyBidirectionalIterator。不要求支持it + 1,但需要支持it++it--

不同帖子答案的相关细节:

这背后的原因是将N添加到随机访问迭代器是恒定时间(例如,将N*sizeof(T)添加到T*(,而对双向迭代器执行相同操作则需要应用++N次。

itstd::map的迭代器,它是一个双向迭代器并且不支持operator+

RandomAccess迭代器支持operator+,例如std::vector的迭代器,这就是为什么std::vector没有出现此错误的原因。