繁体   English   中英

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

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

我对在map中使用的迭代器有疑问。 我有一个 map 类型为map<int, vector<int> > vpmap; 我想遍历整个 map。 然后我用

 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::iteratorLegacyBidirectionalIterator 不需要支持it + 1 ,但需要支持it++it--

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM