list容器
雙向循環(huán)鏈表list
list是雙向循環(huán)鏈表,每個(gè)元素都知道前面一個(gè)元素和后面一個(gè)元素。
list和vector的差別:
樣例:
int data[6]={3,5,7,9,2,4}; list<int> lidata(data, data+6); lidata.push_back(6); ...? ? ? ?list初始化時(shí),申請的空間大小為6。存放下了data中的6個(gè)元素,當(dāng)向lidata插入第7個(gè)元素“6”時(shí)。list申請新的節(jié)點(diǎn)單元,插入到list鏈表中,數(shù)據(jù)存放結(jié)構(gòu)例如以下圖所看到的:
?
? ? ?list每次添加一個(gè)元素,不存在又一次申請內(nèi)存的情況,它的成本是恒定的。
而vector每當(dāng)添加關(guān)鍵元素的時(shí)候,都須要又一次申請新的更大的內(nèi)存空間,會調(diào)用元素的自身的復(fù)制構(gòu)造函數(shù)。存在構(gòu)造成本。在銷毀舊內(nèi)存的時(shí)候,會調(diào)用析構(gòu)函數(shù)。存在析構(gòu)成本。所以在存儲復(fù)雜類型和大量元素的情況下,list比vector更有優(yōu)勢!?
? ?List是一個(gè)雙向鏈表,雙鏈表既能夠向前又能夠向后鏈接它的元素。
? ?List將元素按順序儲存在鏈表中,與向量(vector)相比, 它同意高速的插入和刪除。可是隨機(jī)訪問卻比較慢。
assign() 給list賦值?
back() 返回最后一個(gè)元素?
begin() 返回指向第一個(gè)元素的迭代器?
clear() 刪除全部元素?
empty() 假設(shè)list是空的則返回true?
end() 返回末尾的迭代器?
erase() 刪除一個(gè)元素?
front() 返回第一個(gè)元素?
get_allocator() 返回list的配置器?
insert() 插入一個(gè)元素到list中?
max_size() 返回list能容納的最大元素?cái)?shù)量?
merge() 合并兩個(gè)list?
pop_back() 刪除最后一個(gè)元素?
pop_front() 刪除第一個(gè)元素?
push_back() 在list的末尾加入一個(gè)元素?
push_front() 在list的頭部加入一個(gè)元素?
rbegin() 返回指向第一個(gè)元素的逆向迭代器?
remove() 從list刪除元素?
remove_if() 按指定條件刪除元素?
rend() 指向list末尾的逆向迭代器?
resize() 改變list的大小?
reverse() 把list的元素倒轉(zhuǎn)?
size() 返回list中的元素個(gè)數(shù)?
sort() 給list排序?
splice() 合并兩個(gè)list?
swap() 交換兩個(gè)list?
unique() 刪除list中反復(fù)的元素
轉(zhuǎn)載于:https://www.cnblogs.com/yxwkf/p/5167317.html
總結(jié)
- 上一篇: Javascript面向对象编程(一):
- 下一篇: Leetcode题解(20)