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。我想知道原因。
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+(例如of的迭代器)std::vector,这就是为什么您没有收到此错误的原因std::vector。