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,則如下