【C++ Primer每日刷】之二 迭代器的算术操作

来源:互联网 发布:5800简单编程教学 编辑:程序博客网 时间:2024/06/17 20:54


迭代器的算术操作

 

除了一次移动迭代器的一个元素的增量操作符外,vector 迭代器(其他标准库容器迭代器很少)也支持其他的算术操作。这些操作称为迭代器算术操作(iterator arithmetic),包括:


iter + n

iter – n

 

可以对迭代器对象加上或减去一个整形值。这样做将产生一个新的迭代器,其位置在 iter 所指元素之前(加)或之后(减) n 个元素的位置。加或减之后的结果必须指向 iter 所指 vector 中的某个元素,或者是 vector 末端的后一个元素。加上或减去的值的类型应该是 vector 的 size_type 或 difference_type 类型(参考下面的解释)。


iter1 - iter2

 

该表达式用来计算两个迭代器对象的距离,该距离是名为 difference_type 的 signed 类型 size_type 的值,这里的 difference_type 是 signed 类型,因为减法运算可能产生负数的结果。该类型可以保证足够大以存储任何两个迭代器对象间的距离。

 

iter1 与 iter2 两者必须都指向同一 vector 中的元素,或者指向 vector 末端之后的下一个元素。

 

可以用迭代器算术操作来移动迭代器直接指向某个元素,例如,下面语句直接定位于vector 中间元素:

 

vector<int>::iterator mid =vi.begin() + vi.size() / 2;

 

上述代码用来初始化 mid 使其指向vi 中最靠近正中间的元素。这种直接计算迭代器的方法,与用迭代器逐个元素自增操作到达中间元素的方法是等价的,但前者的效率要高得多。任何改变 vector 长度的操作都会使已存在的迭代器失效。例如,在调用 push_back 之后,就不能再信赖指向 vector 的迭代器的值了。


0 0
原创粉丝点击