C++ 为什么我能';t使用`+;在c+中的`map`迭代器中的`1`+;?
我在C++ 为什么我能';t使用`+;在c+中的`map`迭代器中的`1`+;?,c++,dictionary,vector,iterator,C++,Dictionary,Vector,Iterator,我在map中使用迭代器时遇到问题。我有一张类型为map-vpmap的地图我想循环浏览整个地图。然后我用 for (size_t i = 0; i < vpmap.size(); i++) { { auto it = vpmap.begin(); it++; /*code*/ } for(size_t i=0;i
map
中使用迭代器时遇到问题。我有一张类型为map-vpmap的地图代码>我想循环浏览整个地图。然后我用
for (size_t i = 0; i < vpmap.size(); i++) {
{
auto it = vpmap.begin();
it++;
/*code*/
}
for(size_t i=0;i
这很好。但是当我将it++
替换为it=it+1
时,编译器会给出一个错误。我以前在使用vector
时没有遇到过这个错误。我想知道它的原因。它是的迭代器,它是一个,不支持运算符+
支持运算符+
,例如std::vector
的迭代器,这就是为什么您没有在std::vector
中得到此错误的原因std::vector::迭代器
是一个。它需要支持操作It+1
另一方面,std::map::iterator
是一个。它不需要支持It+1
,但需要支持It++
以及It--
相关详情来自:
这背后的原因是将N
添加到随机访问迭代器是恒定时间(例如,将N*sizeof(T)
添加到T*
),而对双向迭代器执行相同的操作需要应用+
N
次
要在映射上进行迭代,您应该使用类似于(auto const&[key,val]:vpmap)
的东西。您可以使用it=std::advance(it,1)
而不是it=it+1
,而不考虑迭代器的类型。您可以使用任何数字或变量而不是1,甚至是负值。