不匹配'operator + ='aka std :: _ Rb_tree_const_iterator std :: map

use*_*398 2 c++ c++11

我有一个assets从const函数返回的地图,我使用const_iterator来获取地图的子集,如下所示:

std::map<int, Asset>::const_iterator start = assets.begin();
start += 5;
......
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误: error: no match for ‘operator+=’ (operand types are ‘std::map<int, Asset>::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const int, Asset> >}’ and ‘int’)

Jer*_*emy 8

这是因为std::map迭代器是BidirectionalIterators,不RandomAccessIterators -因此支持operator++operator--但不operator+=operator-=.

std::advance(start, 5)改用(请记住,这将导致重复调用operator++).