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

时间:2019-11-11 03:41:32

标签: c++ dictionary vector iterator

我在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之前,我没有收到此错误。我想知道原因。

2 个答案:

答案 0 :(得分:6)

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

另一方面,std::map::iteratorLegacyBidirectionalIterator。不需要支持it + 1,但必须支持it++it--

an answer to a different post中的相关详细信息:

  

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

答案 1 :(得分:5)

itstd::map的迭代器,它是Bidirectional Iterator,不支持operator+

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