zoukankan      html  css  js  c++  java
  • 【转】C++ 标准库值操作迭代器的常见函数

    迭代器是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新添加的函数。

  • 相关阅读:
    python socket 网络编程
    Python中的MySQL接口:PyMySQL & MySQLdb
    Docker Day1 & 2
    Java数据结构与算法(5):AVL树
    Solr集群环境搭建
    Java数据结构与算法(4):二叉查找树
    Solr单机环境搭建及部署
    Java数据结构与算法(3):队列
    Java数据结构与算法(2):栈
    Java数据结构与算法(1):线性表
  • 原文地址:https://www.cnblogs.com/zhanjxcom/p/5634275.html
Copyright © 2011-2022 走看看