zoukankan      html  css  js  c++  java
  • 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指向的元素。

  • 相关阅读:
    Java synchronized对象级别与类级别的同步锁
    java并发编程JUC第十二篇:AtomicInteger原子整型
    java并发编程JUC第十一篇:如何在线程之间进行对等数据交换
    java并发编程JUC第十篇:CyclicBarrier线程同步
    java并发编程JUC第九篇:CountDownLatch线程同步
    java并发编程工具类JUC第八篇:ConcurrentHashMap
    分享Sql性能优化的一些建议
    java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
    java并发编程工具类JUC第六篇:SynchronousQueue同步队列
    java并发编程工具类JUC第五篇:PriorityBlockingQueue优先级队列
  • 原文地址:https://www.cnblogs.com/hoojjack/p/4229160.html
Copyright © 2011-2022 走看看