我在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
之前,我没有收到此错误。我想知道原因。
答案 0 :(得分:6)
std::vector::iterator
是LegacyRandomAccessIterator。需要支持操作it + 1
。
另一方面,std::map::iterator
是LegacyBidirectionalIterator。不需要支持it + 1
,但必须支持it++
和it--
。
an answer to a different post中的相关详细信息:
其背后的原因是将
N
添加到随机访问迭代器是恒定时间(例如,将N*sizeof(T)
添加到T*
),而对双向迭代器执行相同的操作会需要申请++
N
次。
答案 1 :(得分:5)
it
是std::map
的迭代器,它是Bidirectional Iterator,不支持operator+
。
RandomAccess Iterator支持operator+
,例如std::vector
的迭代器,这就是为什么std::vector
没有收到此错误的原因。