雙向鏈表是一個經常使用的數據結構。它並不複雜,若是咱們要本身實現也不是太困難的事情。但既然STL已經給咱們提供了一個,不妨直接用。這樣作,不但省時省力,並且代碼的複用性也好。
數據結構
頭文件與模板類
函數
要想使用STL提供的雙向鏈表,須要包含頭文件spa
#include <list>
這樣,即可以使用模板類list<T>。code
初始化內存
初始化一個list很簡單,用字符串
std::list<T> L;
即可以初始化一個空的鏈表。用string
std::list<T> L{ t1, t2, t3 };
即可以初始化一個有三個元素的鏈表。it
例如,模板
std::list<int> L1{ 20, 13 };
則L1是一個有2個int的鏈表。再例如,class
std::list<std::string> L2{ "實變函數", "泛函分析", "微分幾何", "抽象代數" };
則L2是一個有4個字符串的鏈表。
增、刪元素
list<T>的成員函數push_back,push_front,pop_back,pop_front的做用分別是,在尾部增長元素,在頭部增長元素,在尾部刪除元素,在頭部刪除元素。
前兩個函數的參數類型是(T&&)(C++11的「移動語義」),後兩個函數沒有參數。
這4個函數都沒有返回值。
大小(size)
鏈表的大小指的是這個鏈表中有多少個元素,而不是這個鏈表在內存中佔用多少個字節。
獲取鏈表的大小能夠用list<T>的成員函數size。它沒有參數,返回值爲size_t。
迭代器
迭代器是一個類,它所表達的是一個位置。下面的代碼將L1的全部元素翻倍。
for (auto it = L1.begin(); it != L1.cend(); ++it) { (*it) *= 2; }
經過迭代器刪除元素
用函數list<T>::erase能夠經過迭代器刪除元素。它的參數爲指向要刪除的元素的迭代器。