乙個容器就是一些特定型別物件的集合。順序容器為程式設計師提供控制元素儲存和訪問順序的嫩裡。這種順序不依賴於元素的值,而是元素加入容器時的位置相對應。
vector 可變大小陣列。支援快速的隨機訪問,在尾部之外的位置插入或者刪除元素會很慢
deque 雙端佇列,支援,快速隨機訪問,在尾部之外的位置插入或刪除元素可能很慢
list 雙向列表。支援快速隨機訪問,在列表任何位置插入都很快
forward_list 單向鍊錶,只支援單向順序訪問,在鍊錶任何位置進行插入/刪除操作都很快
array:固定大小陣列,支援快速隨機訪問,不能新增或者刪除元素
string:與vector類似,但是專門用於儲存字元。隨機訪問快,在尾部插入/刪除速度快
選擇容器的基本原則
首選vector
如果程式中有很多小的元素,且空間的額外開銷很重要,則不要使用list或者forword_list
如果程式要求隨機訪問元素,應使用vector或者deuqe
如果程式需要在頭尾插入或者刪除元素,使用list或者forword_list
如果程式程式需要在頭尾插入或者刪除元素,但不胡在中間位置進行插入或刪除操作,使用deque
如果程式只有在讀取輸入時才需要在容器中間插入元素,隨後需要隨機訪問元素
總之,常用三個容器
(1)容器首選vector,陣列連續,空間開銷小
(2)涉及隨機插入刪除,選擇list,鍊錶方便,但是空間上不連續,導致額外空間開銷大,酌情考慮。
(3)deque,中和前兩個特點,如果需要隨機訪問,但元素的刪除和插入只在兩端,使用deque。
型別別名
iterator :容器型別的迭代器型別
const_iterator: 可以讀取元素,不可以改變元素的容器型別的迭代器型別
size_type:無符號整型型別,size()返回的型別
difenrence_type:帶符號的整型型別,兩個迭代器像運算得到的值的型別
value_type :元素型別
reference:元素測左值型別
const_reference:cosnt左值型別
ps:我覺得上面並不是很重要看看就好,你可以使用auto或者decltype去拿到該型別。知道它是關於容器就行。
建構函式(初始化方式)(下面使用vector舉例)
vectorvec; :預設構造
vectorvec1(vec); :拷貝構造
vectorvec2(vec.begin(),vec.end()); :拷貝構造
vectorvec3 ; :列表構造
賦值與swap
vec1 = vec2; //賦值
vec1 = ;
swap(vec1,vec2);//交換
vec.swap(vec2);
大小
vec.size();//返回vec的大小
vec.empty();//返回是否位空
新增/刪除元素(使用vector舉例)
vec.push_back(i) //在vec尾部新增元素i
vec.pop_bcak()//刪除尾部元素
vec.clear() //刪除容器元素
vec.erase( iterator i )//刪除i指向元素
vec.insert( iterator i,j)//在位置i新增元素j
(STL及演算法)7 順序容器的操作
1.容器的定義和型別別名 2.begin和end成員 這兩個成員返回的都是迭代器型別 順序容器三種 vector list deque 這三種順序容器的操作方式是一致的。include include include include using namespace std intmain list和...
順序容器常用操作 交換容器中的元素 增刪元素
c primer 9.3.1 9.3.3 1 交換容器中的元素 只能交換相同存放資料型別的容器,定長陣列array只能與同樣長度的array交換 2 新增元素 push back 在尾部追加 push front 在頭部追加 insert 在任何位置新增 emplace 構造後新增到指定位置 emp...
順序容器的操作1
include include include include using namespace std int main vector size type a1 liat和deque也有相同迭代器,下面列舉的也都是的,vector iterator a2 list是鍊錶,沒有下標,只能用迭代器,ve...