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新添加的函数。

  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/zhanjxcom/p/5634275.html
Copyright © 2011-2022 走看看