C++primer笔记-第3章 字符串、变量和数组(迭代器)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liaoyanyunde/article/details/83796196

 迭代器提供了对对象的间接访问,所有标准库容器都可以使用迭代器。虽然严格意义上说string不是容器,不过也还是可以使用迭代器。

1、使用迭代器

 迭代器跟指针类似,可以访问某个元素,也可以从一个元素移动到另一个元素。跟指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。

//b表示v的第一个元素
//e表示v尾元素的下一位置
auto b = v.begin();
auto e = v.end();

 end成员负责返回指向容器(或者string对象)的尾元素的下一位置,常被称作尾后迭代器。
 如果容器为空,则begin和end返回的是同一个迭代器。

标准容器迭代器的运算符:

  • *iter
    返回迭代器iter所指对象的引用
  • iter->mem
    解引用iter并获取该元素的名为mem的成员,等价于(*iter).mem(使用该方式时括号不能少)
  • ++iter
    令iter指向容器中的下一个元素
  • –iter
    令iter指向容器中的上一个元素
  • iter1==iter2
  • iter1!=iter2
    当且仅当两个迭代器指向的是同一个元素或者他们是同一个容器的尾后迭代器,则相等。

凡是使用了迭代器的循环体,都不要改变迭代器所属容器中元素的个数!

迭代器的类型
迭代器有两种类型:
iterator 可读写
const_iterator 只能读不能写,类似常量指针(指针所指对象是常量)

begin end方法,在对象是常量的时候返回的是const_iterator,如果对象不是常量则返回iterator
cbegin cend方法,不论对象是否是常量,返回的都是const_iterator。

2、迭代器运算

  • iter + n
    迭代器加上一个整数仍得到一个迭代器,迭代器指示的位置跟原来相比向前移动了n个元素。结果迭代器或者指向容器内的一个元素或者尾后元素

  • iter - n
    迭代器减去一个整数仍得到一个迭代器,迭代器指示的位置跟原来相比向后移动了n个元素。结果迭代器或者指向容器内的一个元素或者尾后元素

  • iter+=n
    迭代器加法赋值

  • iter-=n
    迭代器减法赋值

  • iter1 - iter2
    返回的是他们之间的距离,即两个迭代器相差的元素个数,可以是负数。跟指针的相减类似。要注意的时是,迭代器不支持加法,不支持iter1+iter2。
    在用迭代器二分查找法时不能用(beg+end)/2 而是用beg+(end-beg)/2

  • <,<=,>,>=
    参与比较的迭代器必须属于同一个容器。指向的元素位置在前的小于在后的

猜你喜欢

转载自blog.csdn.net/liaoyanyunde/article/details/83796196
今日推荐