九 順序容器

2021-06-20 17:05:55 字數 1204 閱讀 3942

因為容器是可增長的,所以可以推測資料區域是另外分配的,而容器自身大小是不變的,即資料區域和容器變數儲存的位置不同.

vector,可變大小陣列,支援快速隨機訪問,但在尾部之外位置插入刪除元素很慢

deque,同vector,但是支援頭部新增刪除元素,在中間新增刪除元素還是慢

list,雙向鍊錶,任意位置新增刪除元素都很快,但是只可以遍歷訪問元素,不支援快速隨機訪問

forward_list,單項鍊表

array,固定大小陣列,同陣列,但更安全方便

string,同vector,但是專門用來儲存字元,並提供一些字元處理函式.

新標準庫的容器效能很高,不比最精心設計優化過的同類資料結構差,所以應該使用新標準庫容器.

如果程式在讀取輸入時需要在中間插入元素,隨後需要隨機訪問元素,那麼可以將資料儲存到vector中,然後呼叫sort函式

如果確實必須在中間插入元素,可以在輸入階段使用list,之後拷貝到vector中.

初始化乙個容器,可以傳遞乙個迭代器範圍,不要求容器型別是相同的,因為通過迭代器就可以訪問範圍內的元素,也不要求元素型別相同,只要元素可以轉換成對應型別即可.

array型別,大小是型別的一部分.

swap速度比賦值要快,因為本質上swap並不需要賦值對應元素,而是將對應資料結構位址交換即可.當然陣列之類的是需要交換實際資料的.

賦值容器,是元素的完全拷貝,比較容器是進行元素的逐個比較,所以只有當元素定義模擬較運算是才可以比較

插入或刪除元素會使容器的迭代器失效.所以盡量不要修改容器大小,或者總是使用end而不是end的乙個拷貝.加入元素是對被加入元素的乙個拷貝.

emplace 是用引數直接構造元素,而不是拷貝元素,(所以應該要快?)

如果容器中沒有元素,沒有檢測就使用,有可能訪問不存在的元素,和陣列下標越界類似.保證有效是程式設計師的責任.at會考慮越界問題並丟擲out_of_range異常,刪除元素也不會檢測,如果對空元素或空容器 刪除 pop 則是未定義的.

forward_list 由於結構原因,使用首前迭代器,刪除的元素為指定元素之後的乙個元素.ears_after(p)

一些常規下不能使用的限制,需要特殊處理

沒有預設建構函式的類

第九章 順序容器

1 容器必須支援的2種操作,這種型別才能作為容器的元素 一是元素型別支援賦值操作,而是元素型別支援物件複製操作 2 操作特殊需求,例如容器元素型別為類型別,該類只提供了單值初始化建構函式,則不能用vec n 的操作了,因為無法給類型別初始化,這是由於沒有預設建構函式導致的。但是可以vec n,1 3...

第九章 順序容器

char words 這裡其實是定義了乙個指標陣列.順序容器的元素排列次序與元素值無關,而是由元素新增到容器中的次序決定的.順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出lifo棧 queue 先進先出fifo佇列....

容器 順序容器

容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...