c++primer第九章p292學習筆記
什麼是順序容器?下表列出了標準庫(stl)中的順序容器,所有順序容器都提供了快速順序訪問元素的能力,但是順序容器會在以下方面有不同的效能折中: 容器容器(container)包括兩種:順序容器、關聯式容器和無序容器(新增)。
名稱支援的訪問
增刪vector
可變大小陣列
快速隨機訪問
在中間位置插入/刪除元素很慢
string
類似於儲存字元的vector
快速隨機訪問
在中間位置插入/刪除元素很慢
list
雙向鍊錶
雙向順序訪問
在鍊錶的任何位置插入或刪除元素都很快
forward_list
單向鍊錶
單向順序訪問
在鍊錶的任何位置插入或刪除元素都很快
deque
雙端佇列
快速隨機訪問
在頭尾插入或刪除元素很快
array
固定大小陣列
快速隨機訪問
不能新增或刪除元素
vector與string
string和vector都將元素儲存在連續地記憶體空間中,因此隨機訪問速度很快,但是在中間位置增刪元素時需要移動其他元素,導致速度很慢。
list與forward_list
設計的目的是為了令容器的任何位置的增刪操作都很快速,但是這兩個容器不支援隨機訪問。
deque
是乙個更為複雜的資料結構。與string和vector類似,它支援快速的隨機訪問,在中間位置的增刪也可能很慢,但是,deque在兩端增刪元素都是很快的,與list速度相當。
對於容器類的操作:
/**
所有容器都支援的操作
**///型別別名
iterator 此容器型別的迭代器型別
const_iterator 可以讀取元素,但不能修改元素的迭代器型別
size_type 無符號整型,足夠儲存此容器型別的最大可能大小
difference_type 有符號整型,足夠儲存兩個迭代器之間的距離
value_type 元素型別
reference 元素的左值型別,與value_type&含義相同
const_reference 等價於const value_type&
//建構函式
c c; 預設建構函式,構造空容器
c c1
(c2)
; 構造c2的拷貝c1
c c(b, e)
; 構造c,將迭代器b和e指定範圍內的元素拷貝到c(array不支援)
c c(a,b,c...
); 初始化c
//賦值與交換
c1 = c2 將c1中的元素替換為c2中的元素
c1 =
將c1的元素替換為列表中的元素,不適用於array
a.swap
(b); 交換a與b的內容
swap
(a,b) 與a.
swap
(b)等價
//大小
c.size
() c中元素數目(不支援forward_list)
c.max_size
() c中儲存的最大元素數目
c.empty
() 判斷是否為空
//增加刪除元素(不適用於array)
//注:在不同容器中,這些操作的函式都不同
c.insert
(args) 將args中的內容插入c中
c.emplace
(inits) 使用inits構造c中的乙個元素
c.erase
(args) 刪除args中指定元素
c.clear
() 清空所有元素
//關係運算子==,
!= 所有容器都支援
<
,<=
,>
,>= 無序容器不支援
//獲取迭代器
c.begin()
, c.
end(
) 分別返回指向c的收元素和尾元素之後位置的迭代器
c.cbegin()
, c.
cend
() 返回const_iterator
//反向容器的迭代器(不支援forward_list)
reverse_iterator 按逆序定址的迭代器
const_reverse_iterator 不能修改元素的reverse_iterator
c.rbegin()
, c.
rend
() 分別返回指向c的收元素和尾元素之後位置的反向迭代器
c.crbegin()
, c.
crend
()
C 順序容器
一 順序容器型別 順序容器 vector list deque 介面卡 stack queue priority queue 使用這些容器都必須使用相應的標頭檔案 二 容器元素初始化 cc 建立乙個名為c的空容器 cc c2 建立容器c2的副本 cc b,e 建立c,其元素是迭代器b和e的範圍內的副...
C 順序容器
1 概述 乙個容器就是一些特定型別物件的集合。順序容器型別 描述vector 可變大小陣列,支援快速訪問,在尾部之外的地方插入或刪除時可能很慢 deque 雙端佇列。支援快速訪問,在頭尾插入刪除會很快。list 雙向列表。只支援雙向順序訪問。插入刪除很快 forward list 單向列表。只支援單...
C 順序容器
一 各個順序容器效能差異主要體現在一下兩個方面 1.在容器中任意位置新增和刪除元素的代價 2.隨機訪問容器中元素的代價 vector list deque forward list array string vector是可變大小陣列,支援快速隨機訪問,在尾部插入和刪除元素較為方便 list是雙向鍊...