码迷,mamicode.com
首页 > 编程语言 > 详细

【转】C++ 标准库值操作迭代器的常见函数

时间:2016-07-01 22:43:00      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

迭代器是C++标准库中的重要组件,特别是在容器内部,没有迭代器,容器也就无所谓存在了。

例如:vector容器简而言之就是3个迭代器 start finish 以及end_of_storage vector的任何操作都离不开这3个迭代器。。

 

接下来,总结一下C++ 中的迭代器的操作。

C++的迭代器分为5类,依次为 : Input_iterator, output_iterator, forwrd_iterator, bidirectional_iterator 以及  random_access_iterator

访问的级别由低到高,

下面的相应的模板函数的参数是以  “可进行该操作的最小迭代器类型”为基础的。

 

 

函数 advance:

 

template <class InputIterator, class Distance>
  void advance (InputIterator& it, Distance n);

 

迭代器前进 n 个距离。如果是随机迭代器,直接 +n ,否则使用 ++ 操作移动。

使用方法:

list<int>::iterator it = myList.begin();

advance (it, 5);

 

函数distance:

 

template<class InputIterator>
  typename iterator_traits<InputIterator>::difference_type
    distance (InputIterator first, InputIterator last);

求的是迭代器first与last间 的元素的个数,如果是随机迭代器,直接使用 operator- 就好了,否则就要连续调用operator++操作符。

 

 

用法:

vector<int. A = {1,2,3,4}; // c++11

vector<int> ::iterator it = lower_bound(A.begin(), A.end(), 4);

distance(A.begin(), it); 

 

 

begin 和 end: 等价于容器中的begin与end。

比如下述遍历vector的方式:

vector<int> A  = {1,2,4,5,6};

for(auto it = A.begin(), it != A.end();  ++it) 

cout << *it << " " ;

cout << endl;

   等价于:

 

for(auto it = begin(A), it != end(A);  ++it) 

cout << *it << " " ;

cout << endl;

 

prev函数:返回迭代器的前n个位置的迭代器

 

template <class BidirectionalIterator>
  BidirectionalIterator prev (BidirectionalIterator it,
       typename iterator_traits<BidirectionalIterator>::difference_type n = 1);

 

 

例如要返回上述vector的最后一个元素:

cout  << prev(A.end() )  << endl;

 

要返回上述vector的倒数第3个元素:

cout  << prev(A.end() , 3)  << endl;

 

 

next函数:返回迭代器的后n个位置的迭代器:

 

template <class ForwardIterator>
  ForwardIterator next (ForwardIterator it,
       typename iterator_traits<ForwardIterator>::difference_type n = 1);

 

 

例如要返回上述vector的第二个元素

cout  << next(A.begin())  << endl;

第k个元素:

cout << next(A.begin(), k-1) << endl;

上述函数中,后四个函数是C++11新添加的函数。

【转】C++ 标准库值操作迭代器的常见函数

标签:

原文地址:http://www.cnblogs.com/zhanjxcom/p/5634275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!