STL迭代器

  • 大部分ACM中使用的都是C/C++语言,可是说到C语言和C++语言的区别,殊不知道。c++

  • C++语言用于竞赛真的是很是方便的,里面有不少函数还有STL这个好东西,比C语言方便,比其余语言好理解。
  • 在C语言中,有指针这个东西,固然在C++中也能用指针,可是实际上是不建议在C++中继续使用C语言的指针,因而C++有了引用传参这个东西来替代指针。对C++容器的访问,也就出现了迭代器这么一个东西。
  • 迭代器和指针相似,但迭代器更加丰富。 

迭代器的操做运算符

  • 和指针相似,有如下操做:ide

1 *iter;      //返回迭代器iter所指元素的引用
2 iter->men;  //解引用iter并得到该元素的名为men的成员,至关于(*iter).men
3 ++iter;     //令iter指示容器的下一个元素
4  --iter;      //令iter指示容器的上一个元素
5 iter1==iter2; // 若是两个迭代器指示的是同一个元素或者它指向同一个容器的尾后迭代器,则相等.
View Code
  • 除外迭代器也支持下面几种操做:
1 iter+n;           //迭代器加上一个整数值仍获得一个迭代器,迭代器指示的新位置向前移动了,指示多是容器的一个元素或者是尾部的下一个位置
2 iter-n;          //相反,迭代器指示的位置向后移动了,指示多是容器的一个元素或者是尾部的下一个位置
3 iter1+=n;   //等价于iter1+n
4 iter1-=n;    //等价于iter2-n
5 iter1-iter2;  //两个迭代器的距离,
6 >,<,>=,<= //位置离begin近的较小
View Code
  • 可是得注意 ,后面这几种操做只有随机迭代器才支持,具体迭代器的分类下面会讲到。

迭代器的类型

  • 迭代器通常使用iterator 和  const_iterator两种类型,区别应该看名称也能猜出来,后者只能进行读取操做,而不能修改值。函数

  • c++11中,引入了两个新函数,cbegin和cend,这两个函数能直接返回 const_iterator 类型的迭代器,方便操做。

迭代器的分类

  • 每种容器都有本身的迭代器类型。
  • 只有Vector 和 Deque 的迭代器类别为随机访问,而其余map,set,list都只支持双向迭代器
  • 两者的区别就是随机迭代器支持+=n(n为常数)的运算,而双向迭代器只能自增自减。(固然你能够本身重载双向迭代器的+=操做)

迭代器的使用

  • 对于每种容器,使用迭代器方法是同样的,例如对vector而言:
1 vector<int>::itertor it;  //定义了一个随机迭代器
2 vector<int>::const_itertor iter;  //定义了一个只读的随机迭代器
  • 对于其余容器使用方法同上,特别的是,C++的String类型也支持随机迭代器的形式。

容器中的大部分函数以及操做,都是基于迭代器完成的。因此学会使用迭代器是学习C++的一个必经之路。学习

值得一提的是,既然使用C++语言,就要彻底利用C++语言的方便性,而不是仅仅只使用一个cin或者cout。spa

相关文章
相关标签/搜索