• 【转】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新添加的函数。

  • 相关阅读:
    [转]来扯点ionic3[2] 页面一线牵 珍惜这段缘
    [转]ionic工作原理
    [转]禁止浏览器自动保存密码弹框
    [转]git提交代码时遇到代码库有更新以及本地有更新的解决方法
    [转]Angular 4 *ngIf/Else
    [转]Angular4 引用 material dialog时自定义对话框/deep/.mat-dialog-container
    ES之五:ElasticSearch聚合
    Logstash之四:配置说明
    Logstash之三:命令行中常用的命令
    Logstash之二:原理
  • 原文地址:https://www.cnblogs.com/zhanjxcom/p/5634275.html
Copyright © 2020-2023  润新知