鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。
相較於vector的連續線性空間,list就顯得負責許多,它的好處是每次插入或者刪除乙個元素,就是配置或者釋放乙個元素的空間。因此,list對於空間的運用有絕對的精準,一點也不浪費。而且,對於任何位置的元素插入或元素的移除,list永遠是常數時間。
list和vector是兩個最常被使用的容器。
list容器是乙個雙向鍊錶。
list容器不能像vector一樣以普通指標作為迭代器,因為其節點不能保證在同一塊連續的記憶體空間上。list迭代器必須有能力指向list的節點,並有能力進行正確的遞增、遞減、取值、成員訪問操作。所謂」list正確的遞增,遞減、取值、成員取用」是指,遞增時指向下乙個節點,遞減時指向上乙個節點,取值時取的是節點的資料值,成員取用時取的是節點的成員。
由於list是乙個雙向鍊錶,迭代器必須能夠具備前移、後移的能力,所以list容器提供的是bidirectional iterators.
list有乙個重要的性質,插入操作和刪除操作都不會造成原有list迭代器的失效。這在vector是不成立的,因為vector的插入操作可能造成記憶體重新配置,導致原有的迭代器全部失效,甚至list元素的刪除,也只有被刪除的那個元素的迭代器失效,其他迭代器不受任何影響。
list容器不僅是乙個雙向鍊錶,而且還是乙個迴圈的雙向鍊錶。
#include
#include
using
namespace std;
intmain()
list<
int>
::_nodeptr node = mylist._myhead-
>_next;
for(
int i =
0; i < mylist._mysize *
2;i++)}
return0;
}
list lstt;
//list採用採用模板類實現,物件的預設構造形式:
list
(beg,end)
;//建構函式將[beg, end)區間中的元素拷貝給本身。
list
(n,elem)
;//建構函式將n個elem拷貝給本身。
list
(const list &lst)
;//拷貝建構函式。
push_back
(elem)
;//在容器尾部加入乙個元素
pop_back()
;//刪除容器中最後乙個元素
push_front
(elem)
;//在容器開頭插入乙個元素
pop_front()
;//從容器開頭移除第乙個元素
insert
(pos,elem)
;//在pos位置插elem元素的拷貝,返回新資料的位置。
insert
(pos,n,elem)
;//在pos位置插入n個elem資料,無返回值。
insert
(pos,beg,end)
;//在pos位置插入[beg,end)區間的資料,無返回值。
clear()
;//移除容器的所有資料
erase
(beg,end)
;//刪除[beg,end)區間的資料,返回下乙個資料的位置。
erase
(pos)
;//刪除pos位置的資料,返回下乙個資料的位置。
remove
(elem)
;//刪除容器中所有與elem值匹配的元素。
size()
;//返回容器中元素的個數
empty()
;//判斷容器是否為空
resize
(num)
;//重新指定容器的長度為num,
若容器變長,則以預設值填充新位置。
如果容器變短,則末尾超出容器長度的元素被刪除。
resize
(num, elem)
;//重新指定容器的長度為num,
若容器變長,則以elem值填充新位置。
如果容器變短,則末尾超出容器長度的元素被刪除。
assign
(beg, end)
;//將[beg, end)區間中的資料拷貝賦值給本身。
assign
(n, elem)
;//將n個elem拷貝賦值給本身。
list&
operator=(
const list &lst)
;//過載等號操作符
swap
(lst)
;//將lst與本身的元素互換。
front()
;//返回第乙個元素。
back()
;//返回最後乙個元素。
reverse()
;//反轉鍊錶,比如lst包含1,3,5元素,執行此方法後,lst就包含5,3,1元素。
sort()
;//list排序
C STL常用容器總結之四 鍊錶list
list是每個節點包含前驅指標 後繼指標和資料域三個部分的雙向鍊錶。list不提供隨機訪問,訪問元素需要按順序走到需訪問的元素,時間複雜度為o n 在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。所以它只需要乙...
C STL常用容器總結之四 鍊錶list
list是每個節點包含前驅指標 後繼指標和資料域三個部分的雙向鍊錶。list不提供隨機訪問,訪問元素需要按順序走到需訪問的元素,時間複雜度為o n 在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。list不僅是乙個雙向鍊錶,而且還是乙個環狀雙向鍊錶。所以它只需要乙...
C STL常用容器(一)
使用時需要包含標頭檔案 include 1.初始化vector vec 16 定義了已知長度16的vector vector vec 64,2 定義了初值為2長度64的vector vector vec a 用a向量來建立向量 vector vec a.begin i,a.begin j 定義了值為...