C++标准库:使用std_list作为链表
- C++標準庫
- std::list
- 容器
- 算法
- 鏈表
摘要:本文是“C++標準庫導引系列”的一部分。std::list可能在許多時候被人們忘記,我自己就似乎忘記了這容器,當我在寫這個系列的文章的時候,我意識到原來std::list有時是更好的選擇。std::list提供一個鏈表的實現(xiàn),它是基于結點的容器,同時它也提供了許多標準算法的特殊版本,因為此時有更好的方法。
我們已經(jīng)寫了這個系列的好幾篇文章了,本文跟之前的文章結構類似,首先給出一個基本的使用。由于std::list提供許多自定義的算法,所以本文也會把這一點體現(xiàn)出來。下面從基本的使用開始,為了使用std::list我們只需要如下:
#include<list>//定義一個空的std::list容器
std::list<int>?list;
//定義含有n個int()的容器
std::list<int>?linst(n);
//產(chǎn)生一個list,并從迭代器中讀取內容
std::list<int>?list(begin, end);
?
當我們已經(jīng)有一個std::list在這里的時候,我們需要對它進行操作,相對容器而言它的基本操作就是插入與刪除元素,同時提供一些額外的操作諸如排序或合并等等。這些操作std::list都存在,但它有自己的優(yōu)勢,它往往有指針來完成操作,而不是簡單的復制。
#include<list>class?Type;
std::list<Type>?list;
//我們需要指定一個位置,因為std::list不如std::set會自動確定位置
Type value;
list.insert(list.begin(), value);
Type array[]={12, 12, 43, 87};
const?size_t?array_size=sizeof(array)/sizeof(array[0]);
list.insert(list.end(), array, array+array_size);
//把數(shù)據(jù)追加到容器最后
list.push_back(value);
//把數(shù)據(jù)追加到容器頭部,這沒有什么性能問題
list.push_front(value);
//從表的尾或頭刪除數(shù)據(jù)
list.pop_back();
list.pop_front();
?
上面的代碼對于大部分容器來說都是常見的,但是std::list提供的特殊成員函數(shù)我們也要強調,下面就是這個特殊的函數(shù),存在sort、splice、unique和merge算法。
//對表內的元素進行排序list.sort();
//把連續(xù)相等的元素刪除,留下唯一的值
list.unique();
std::list<int>?list_2;
//把list中的元素拼接到list_2
list_2.splice(list_2.begin(), list);
//還可以有選擇地拼接
list_2.splice(list_2.begin(), list, pos);//pos是list的一個迭代器
//merge與splice算法很相似,但它合并兩個已序的容器
//merge算法把兩個已序的容器合并,并且保證合并后也是已序
list.sort();
list_2.sort();
list_2.merge(list);
list_2.merge(list, op);//op是一個比較仿函數(shù)
?
本系列文章只是作為一個導引,所以并沒有太多的細節(jié),但作為一個示例也希望激發(fā)大家學習和使用標準庫。C++在中國的現(xiàn)況很讓人擔心,大家普遍把C++當作C來使用,基本沒有使用STL的意識,在C++標準出來10年之后今天還是如此,讓我們很擔心。
軟件設計就是不斷重用的過程,同時也是一個不斷重構的過程
總結
以上是生活随笔為你收集整理的C++标准库:使用std_list作为链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四则运算表达式求值(栈的应用)
- 下一篇: 数据结构算法集---C++语言实现