zoukankan      html  css  js  c++  java
  • list::splice()函数详解

    http://blog.csdn.net/bichenggui/article/details/4674900

    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指向的元素。

    例子:

    // splicing lists

    #include <iostream>

    #include <list>

    #include <string>

    #include <algorithm>

    using namespace std;

    int main ()

    {

      list<int> mylist1, mylist2;

      list<int>::iterator it;

      // set some initial values:

      for (int i=1; i<=4; i++)

         mylist1.push_back(i);      // mylist1: 1 2 3 4

      for (int i=1; i<=3; i++)

         mylist2.push_back(i*10);   // mylist2: 10 20 30

      it = mylist1.begin();

      ++it;                         // points to 2

      mylist1.splice (it, mylist2); // mylist1: 1 10 20 30 2 3 4

                                    // mylist2 (empty)

                                    // "it" still points to 2 (the 5th element)                                     

      mylist2.splice (mylist2.begin(),mylist1, it);

                                    // mylist1: 1 10 20 30 3 4

                                    // mylist2: 2

                                    // "it" is now invalid.

      it = mylist1.begin();

      advance(it,3);                // "it" points now to 30

      mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end());

                                    // mylist1: 30 3 4 1 10 20

      cout << "mylist1 contains:";

      for (it=mylist1.begin(); it!=mylist1.end(); it++)

        cout << " " << *it;

      cout << "/nmylist2 contains:";

      for (it=mylist2.begin(); it!=mylist2.end(); it++)

        cout << " " << *it;

      cout << endl;

      list<string> dictionary, bword;

      dictionary.push_back("any");

      dictionary.push_back("angle");

      dictionary.push_back("ajust");

      dictionary.push_back("common");

      dictionary.push_back("cannon");

      dictionary.push_back("company");

      bword.push_back("blue");

      bword.push_back("banana");

      bword.push_back("break");

      list<string>::iterator its = dictionary.begin();

      for (int i = 0; i < 3; i++)

          its++;

     dictionary.splice(its, bword);

     copy(bword.begin(), bword.end(), ostream_iterator<string>(cout, "/n"));

     return 0;

    }

  • 相关阅读:
    Hlg 1740 DP求路径且按最小字典序输出.cpp
    Uestc 1720 【容斥原理】.cpp
    Uva 10112 【简单的计算几何】.cpp
    Vijos 1071 【DP之记录路径】
    Hlg 1665 【KMP】.cpp
    cf 226b 唯美思维题~.cpp
    Hlg 1049 【广搜+康拓展开】.cpp
    Hlg 1067 【状态压缩DP】.cpp
    Pythoner.CN: 中小企业IT不可错过的十大虚拟机软件 | Pythoner.CN
    OpenStack Hacker养成指南 | UnitedStack Inc.
  • 原文地址:https://www.cnblogs.com/kex1n/p/3524014.html
Copyright © 2011-2022 走看看