我在v.begin()+ 3或v.end() - 1等上遇到错误。为什么我们无法对迭代器进行操作?
有两个列表l和m
l.assign(m.begin()+ 3,m.end() - 1);
这段代码有错误
[错误]不匹配'运营商 - ' (操作数类型是' std :: list :: iterator {aka std :: _ List_iterator}'和' int')
答案 0 :(得分:0)
迭代器尽可能抽象;迭代器可以是一个指向数组的指针,一个流中的一个位置,当你递增时它从stdin
读取,任何东西。因此,标准算术运算符仅针对随机访问迭代器实现,因此它们不会隐藏简单语法背后的潜在昂贵操作。
为了以任意数量递增/递减任何迭代器,您可以使用std::advance
:
std::advance(it, 3); //increment by three
std::advance(it, -1); //decrement once
C ++ 11提供std::next
和std::prev
以更实用的方式实现这一点:
auto new_it = std::next(it,3); //increment by three
auto new_it = std::prev(it); //decrement once