容器庫概覽
1. 對容器可以保存的元素類型的限制
順序容器幾乎可以保存任意類型的元素。特別是我們可以定義一個容器,容器中包含的是另一個容器,這種容器的定義與任何其他容器類型完全一樣:
在尖括號中指定元素類型(此種情況下,是另一種元素類型)
vector<vector<string>> lines; //vector的vector,此處lines是一個vector,其元素類型是string的vector
容器操作:
類型別名:
iterator 此容器類型的叠代器類型; const_iterator 可以讀取元素,但不能修改元素的叠代器類型
size_type 無符號整數類型,足夠保存此種容器類型最大可能容器的大小
difference_type 帶符號整數類型,足夠保存兩個叠代器之間的距離
value_type 元素類型
reference 元素的左值類型;與value_type&含義相同; const_reference 元素的const左值類型
構造函數:
C c; 默認構造函數,構造空容器
C c1(c2); 構造c2的拷貝c1
C c(b, e); 構造c,將叠代器b和e指定的範圍內的元素拷貝到c
賦值與swap:
c1 = c2 將c1中的元素替換為c2中元素
c1 = {a,b,c...}將c1中的元素替換為列表中元素
a.swap(b) 交換a和b的元素 ;swap(a,b)相同
大小:
c.size() c中元素的數目
c.max_size() c中可保存的最大元素項目
c.empty() 若c中存儲了元素,返回false,否則返回true
叠代器:
類似於指針類型,叠代器也提供了對對象的間接訪問,就叠代器而言,其對象是容器中的元素或者string對象中的字符。使用叠代器可以訪問某個元素,叠代器也能從一個元素移動到另外一個元素,叠代器有有效和無效之分,這一點和指針差不多
有效的叠代器或者指向某個元素,或者指向容器中尾元素的下一位置
使用叠代器:
和指針不一樣的是,獲取叠代器不是使用取地址符,有叠代器的類型同時擁有返回叠代器的成員,譬如這些類型都擁有名為begin和end的成員,
其中begin成員負責返回指向第一個元素(或第一個字符)的叠代器;end成員則負責返回指向容器“尾元素的下一位置”的叠代器,也就是說,
該叠代器指示的是容器的一個本不存在的“尾後元素”,這樣的叠代器沒什麽意義,僅是個標記而已,表示我們處理完了容器中的所有元素
end成員返回的叠代器常被稱為尾後叠代器或者簡稱為尾叠代器,特殊情況下,如果容器為空,那麽begin和end返回的是同一個叠代器
容器庫概覽