为什么我不能在 c++ 中"map"的迭代器中使用"+1"?
Why I can't use `+1` in the iterator of `map` in c++?
我在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
时没有遇到过这个错误。我想知道原因。
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迭代器支持operator+
,例如std::vector
的迭代器,这就是为什么std::vector
没有出现此错误的原因。
相关文章:
- 再次获得 std::map 会更改之前的迭代器
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- 为什么我不能在 c++ 中"map"的迭代器中使用"+1"?
- Map中的(字符串的)向量迭代器
- 访问基于范围的循环(如for_each)中的std::map迭代器
- map<int,int>的*迭代器是什么?它不是pair<int,int>
- std::map 擦除 - 将迭代器传递给错误的映射
- C++ Map erase(),迭代器打印 erased 元素
- 由于从 std::map 派生的类中的 std::map 迭代器导致的内存错误
- C++ std::map 和 std::set 擦除复制值,从而使迭代器失效
- 如果迭代器的迭代器永远不会无效,则是STD :: MAP访问线程安全
- SIGBUS 尝试递增 std::map 迭代器时
- C 迭代器从Typedef std :: Map作为模板参数声明
- std::map 线程安全和迭代器失效
- 为什么要对 map::find 应用不存在的键将返回一个C++中第一个值映射大小的迭代器
- 为 map<T1、T2> 迭代器创建模板函数
- std::map<>::迭代器错误
- std :: map :: size()与迭代器不同