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

Zha*_*Wei 3 c++ dictionary iterator vector

我在使用in的迭代器时遇到问题map。我有一种类型的地图,map<int, vector<int> > vpmap;我想遍历整个地图。然后我用

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

很好 但是,当我更换it++it=it+1。编译器出现错误。在使用之前,我没有收到此错误vector。我想知道原因。

R S*_*ahu 6

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

另一方面,std::map::iteratorLegacyBidirectionalIterator。它并不需要支持it + 1,但它需要支持it++,以及it--

答案的相关详细信息

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


son*_*yao 5

it是的迭代器std::map,它是双向迭代器,不支持operator+

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