Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我能';t使用`+;在c+中的`map`迭代器中的`1`+;?_C++_Dictionary_Vector_Iterator - Fatal编程技术网

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,甚至是负值。