• Iterator迭代器的相关问题


    1.使用stl中的  advance和 distance 方法来进行iterator的加减

     以前在遍历vector的时候,经常使用iterator之间的加减来获得元素在容器里面的index。  今天在进行list的 iterator加减的时候,发现不能编译通过,后面想起list是非线性的容器,不能加减。 查了一下资料,发现stl有提供两个iterator加减的方法:advance 和 distance, advance是 将iterator移动,而distance是计算两个iterator直接的距离
     
    2
     
    partial_sort(beg,mid,end)
    partial_sort(beg,mid,end,comp)
    对mid-beg个元素进行排序,也就是说,如果migd-beg等于42,则该函数将有序次序中的最小值元素放在序列中
    的前42个位置。partial_sort完成之后,从beg到mid(但不包括mid)范围内的元素时有序的,已排序范围内没有
    元素大于mid之后的元素。未排序元素之间的次序是未指定的。
    例如:
    有一个赛跑成绩的集合,我们想知道前三名的成绩但并不关心其他名次的次序,可以这样对这个序列进行排序。
    partial_sort(scores.begin(),scores.begin()+3,scores.end());


    那么paitical_sort的原理是什么呢?是堆排序!
    首先创建一个堆,得到最大值。如果要得到次大值,就将头结点去掉,即调用pop_heap(),此时的头结点就是
    次大值,可以这样依次得到最大或者最小的几个值!
     
     
    3

    list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。

    函数有以下三种声明:

    void splice ( iterator position, list<T,Allocator>& x );  // 

    void splice ( iterator position, list<T,Allocator>& x, iterator i );

    void splice ( iterator position, list<T,Allocator>& x, iterator first, iterator last );

    函数说明:在list间移动元素:

    将x的元素移动到目的list的指定位置,高效的将他们插入到目的list并从x中删除。

    目的list的大小会增加,增加的大小为插入元素的大小。x的大小相应的会减少同样的大小。

    前两个函数不会涉及到元素的创建或销毁。第三个函数会。

    指向被删除元素的迭代器会失效。

    参数:

    position

    目的list的位置,用来标明 插入位置

    x

    源list、

    first,last

    x里需要被移动的元素的迭代器。区间为[first, last).

    包含first指向的元素,不包含last指向的元素。

  • 相关阅读:
    Jenkins学习记录(三)
    Jenkins学习记录(二)
    并发编程
    黏包及解决方法
    socket通信,三次握手,四次挥手
    异常处理
    元类与魔法方法
    封装方法与多态
    组合与封装
    继承
  • 原文地址:https://www.cnblogs.com/hoojjack/p/4229160.html
Copyright © 2020-2023  润新知