如何用指定的值增加任何容器的迭代器?

时间:2015-09-07 10:50:30

标签: c++ stl

我在v.begin()+ 3或v.end() - 1等上遇到错误。为什么我们无法对迭代器进行操作?

有两个列表l和m

l.assign(m.begin()+ 3,m.end() - 1);

这段代码有错误

[错误]不匹配'运营商 - ' (操作数类型是' std :: list :: iterator {aka std :: _ List_iterator}'和' int')

1 个答案:

答案 0 :(得分:0)

迭代器尽可能抽象;迭代器可以是一个指向数组的指针,一个流中的一个位置,当你递增时它从stdin读取,任何东西。因此,标准算术运算符仅针对随机访问迭代器实现,因此它们不会隐藏简单语法背后的潜在昂贵操作。

为了以任意数量递增/递减任何迭代器,您可以使用std::advance

std::advance(it, 3); //increment by three
std::advance(it, -1); //decrement once

C ++ 11提供std::nextstd::prev以更实用的方式实现这一点:

auto new_it = std::next(it,3); //increment by three
auto new_it = std::prev(it); //decrement once