1. 程式人生 > >c++ list 容器splice函式

c++ list 容器splice函式

list 的splice函式主要是用來合併兩個list。
splice是list中特有的拼接方法。splice實現了不需要拷貝的list合併,即可以在常數時間內從list的一個區域拼接到另一個list的一個區域。也就是說splice是一個常數時間的函式(但是也會產生其他形如list的size()問題,導致size()處理時間為O(n)不為常數,見http://blog.csdn.net/russell_tao/article/details/8572000)。

// splicing lists
#include <iostream>
#include <list>

int main ()
{
  std
::list<int> mylist1, mylist2; std::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) //此處的it由於是指向的mylist1,splice後,此迭代器依然存在於 //mylist1中,故而不失效,而後面的splice,由於it指向的地址被插入到 //mylist2中,而使迭代器it失效 mylist2.splice (mylist2.begin(),mylist1, it); // mylist1: 1 10 20 30 3 4
// mylist2: 2 // "it" is now invalid. it = mylist1.begin(); std::advance(it,3); // "it" points now to 30 mylist1.splice ( mylist1.begin(), mylist1, it, mylist1.end()); // mylist1: 30 3 4 1 10 20 //注意此處mylist前後交換了,這可以用作list形如迴圈移位的操作 std::cout << "mylist1 contains:"; for (it=mylist1.begin(); it!=mylist1.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; std::cout << "mylist2 contains:"; for (it=mylist2.begin(); it!=mylist2.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }

相關推薦

c++ list 容器splice函式

list 的splice函式主要是用來合併兩個list。 splice是list中特有的拼接方法。splice實現了不需要拷貝的list合併,即可以在常數時間內從list的一個區域拼接到另一個list的一個區域。也就是說splice是一個常數時間的函式(但是也

『OI常用的c++STL容器函式

·vector ·queue ·priority_queue ·deque ·set ·map ·stack ·sort ·upper_bound,lower_bound,binary_search <更新提示> <第一次更新>

C++ LIST容器詳解

STL之list容器詳解 List 容器 list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向連結串列,可以高效地進行插入刪除元素。 使用list容器之前必須加上<vector>標頭檔案:#in

C++】vector容器list容器中使用單個迭代器的erase函式學習筆記

例題為:假設有如下ia的定義,ia複製到vector和list中,把list容器中奇數值元素刪除掉,把vector容器偶數值元素刪除掉。 陣列複製採用push_back操作。刪除操作採用了erase函式,由於該函式返回值為指向被刪除元素後面的元素,則使用了返回值賦值回給迭代

C++STL隨手筆記(二)List容器splice及std::partition用法

list容器內建splice這個函式,可以將容器依指定範圍切割, 以及std的partition可以對容器中的元素進行條件篩選並排續, 稱著記憶猶新趕快記錄下來用法。 #include <lis

C++ 淺析 STL 中的 list 容器

時也 sta 雙向鏈表 class span 所有 rom 實現 -s list - 擅長插入刪除的鏈表 鏈表對於數組來說就是相反的存在。 數組本身是沒有動態增長能力的(程序中也必須又一次開辟內存來實現), 而鏈表強悍的就是動態增長和刪除的能力。 但對於數組強悍的隨機

c++11 List 容器

clu bsp 註意 數據拷貝 位置 重載 operator 數據 resize c++11 List 容器 List簡介 list是一個雙向鏈表容器 可高效地進行插入刪除元素。 list不可以隨機存取元素,所以不支持a

C++學習:list容器詳解(一)

list容器詳解       首先說說STL         STL就是Standard Template Library,標準模板庫。這可能是一個歷史上最令人興奮的工具的最無聊

list::splice函式的使用

list::splice實現list拼接的功能。將源list的內容部分或全部元素刪除,拼插入到目的list。 函式有以下三種宣告: 一:void splice ( iterator position, list<T,Allocator>& x );  

C++STL學習——List容器

List容器 List簡介 list是一個雙向連結串列容器,可高效地進行插入刪除元素。 list不可以隨機存取元素,所以不支援at.(pos)函式與[]操作符。It++(ok) it+5(err) 標頭檔案#include<list> lis

STL中list容器中sort函式用法

首先,宣告一下,由於list基礎結構是連結串列,不能直接用下標【】來直接取某一元素。 1、當list 中型別是int或者string型別時,直接呼叫sort函式,即 void ListSortTest1() {list<string> num;num.push_

STL中關於list容器的sort函式詳解

寫在前面 因為在stl中stl_algo中提供有sort函式,他的函式原型: template <class RandomAccessIterator> inline void sort(RandomAccessIterator first, RandomAc

list容器的erase函式和remove函式

由於list容器的特殊實現,所以list容器實現了自己的erase函式和remove函式。erase函式的函式宣告:可以看到函式的引數是由迭代器給出的。由迭代器給出刪除的位置或者區間。    1) Removes from the list container either

C++ list中erase和remove函式的用法

erase的作用是,使作為引數的迭代器失效,並返回指向該迭代器下一引數的迭代器。 如下: list ParticleSystem; list::iterator pointer; if(pointer->dead == true) { pointer = P

c++學習之容器——erase()函式

先介紹erase()函式的用法,erase()函式用於在順序型容器中刪除容器的一個元素,有兩種函式原型,c.erase(p),c.erase(b,e);第一個刪除迭代器p所指向的元素,第二個刪除迭代器b,e所標記的範圍內的元素,c為容器物件,返回值都是一個迭代器,該迭代器

C++STL---list容器

一、大概含義 list實現了雙向連結串列的資料結構,在連結串列的任一位置的元素進行插入、刪除和查詢都是極快速的。同時list的每一個節點有三個域:前驅元素指標域、資料域和後繼元素指標域。要注意的是由於list物件的節點並不要求在一段連續的記憶體中,所以對於迭代器,只能通過++或者--的形式將迭代

C# List 泛型的反射, 泛型 函式的反射

  var typeList = typeof(List<>);                     Type typeDataList = typeList.MakeGenericType(datatypeTarget.DataObjectType);  

C++ STL 容器部分有關list 連結串列容器的基本操作

#include<iostream> using namespace std; #include "list" //list模型的標頭檔案 /*總結*/ //相當於一個雙向連結串列 //1 list基本與其餘容器模型差不多類似 注意一點就是不允許隨機插

C++ STL 容器技術 之 list雙向連結串列容器

簡介: list是雙向連結串列的一個泛化容器,它的資料元素可通過連結串列指標串接成邏輯意義上的線性表。不同於採用線性表順序儲存結構的vector和deque容器,list雙向連結串列中任一位置的元素查詢、插入和刪除,都具有高效的常數階演算法時間複雜度O(1)。 lis

C++自帶sort函式對vector容器元素進行排序

1.包含標頭檔案 #include<algorithm>,然後using namespace std; 2.假如你定義的vector變數為vector<Type> num,則如下