9.1 順序容器的定義
順序容器Sequential Container主要有三種:vector
砌溺、list
和deque
爵政。
主要區(qū)別在于訪問元素的方式和增刪操作的代價侣背。
Container | 特點 |
---|---|
vector |
支持快速隨機訪問 |
list |
支持快速插入刪除 |
deque |
雙端隊列 |
9.1.1容器元素的初始化
順序容器初始化主要有5種:
語法 | 容器構(gòu)造法 | 適用范圍 | 說明 |
---|---|---|---|
C <T> c |
默認構(gòu)造函數(shù) | 所有容器 | C是容器類型名狂窑,T是元素類型粹庞, |
C c(c1) |
復制構(gòu)造函數(shù) | 所有容器 | c1和c必須相同容器類型和元素類型 |
C c(it_b,it_e) |
部分復制 | 所有容器 | it_b與it_e是迭代器 |
C c(n,t) |
指定初始化元素數(shù)目和默認值 | 順序容器 | n是個數(shù),t是元素默認值 |
C c(n) |
指定初始化元素數(shù)目 | 順序容器 | n是個數(shù)捌朴,默認值是0或者空 |
默認初始化
最常用吴攒、最簡單、最佳運行時性能:C<T> c
其他初始化
完全復制:C c(c1)
部分復制:C c(it_b,it_e)
指定初始化元素數(shù)目:C c(n)
指定初始化元素數(shù)目和默認值:C c(n,t)
9.1.2 容器內(nèi)元素類型的約束
基本元素類型約束:可復制可賦值
不能作為容器元素類型舉例如下:
No. | 類型 | 原因 |
---|---|---|
1 | 引用類型 | 不可賦值 |
2 | auto_ptr |
不可復制 |
3 | IO庫類型 | 不可復制賦值 |
- 容器操作的特殊要求
支持復制和賦值是容器元素類型的最低要求砂蔽,一些容器操作需要特殊要求洼怔。例如:
操作 | Operation | 約束 |
---|---|---|
空容器初始化 | C<T> c |
最低約束 |
指定元素個數(shù)和參數(shù)的容器初始化 | C c(n,t) |
帶參數(shù)t相同類型形參的構(gòu)造函數(shù) |
指定元素個數(shù)的容器初始化 | C c(n) |
默認構(gòu)造函數(shù) |
例如:Foo
是一個沒有默認構(gòu)造函數(shù),但是有一個int
型形參的構(gòu)造函數(shù)左驾。
vector<Foo> empty; // ok,不需要默認構(gòu)造函數(shù)
vector<Foo> bad(10);// error,需要默認構(gòu)造函數(shù)
vector<Foo> ok(10,1);// ok,需要`int`型形參的構(gòu)造函數(shù)
2.容器的容器
容器本身可以作為容器的元素類型镣隶。例如:vector<vector<int> >
。
注意诡右,最后兩個>
之間需要有一個空格安岂。C++11已經(jīng)沒有這個要求了
收獲
本節(jié)主要講解Sequential Container的三個容器(vector
,list
,deque
)和五種通用初始化方式;容器對元素類型是有最低約束的(可復制可賦值)帆吻,其他一些操作也會對元素有特殊約束要求域那。