容器
一、順序容器:
1、 概念
它將單一型別元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素,即為順序容器。
2、型別
標準庫定義了三種順序容器的型別:vector、list、deque。
vector相當於c語言中的陣列,list相當於c語言中的鍊錶,而deque則是雙端可以插入的vector。
3、語法:
cc; 建立乙個空的容器
c c(c2); 把從c2中的內容複製給c
c c(b,e); 把b和e之間的內容複製給容器
容器的容器
vector> lines;
4、在順序容器中的操作
(1)將元素值複製到容器中
c.push_back(t); //順序容器都支援的操作
c.push_front(t); //只適用於list和deque容器型別
c.insert(p,t); //在迭代器p所指向的元素前面插入值為t的新元素
(2)訪問順序容器內元素的操作
c.back()//返回容器c的最後乙個元素的引用
c.front()//返回容器c的第乙個元素的引用
c[n]//返回下標為n的元素的引用只適用於vector和deque容器
c.at(n)//返回下標為n的元素的引用只適用於vector和deque容器
(3)刪除元素
c.erase(p) //刪除迭代器p所指向的元素,返回乙個迭代器,它指向被刪除元素後面的元素
c.erase(b,e) //刪除迭代器b和e所標記的範圍內所有的元素
c.clear() //刪除容器c內的所有元素,返回void
c.pop_back() //刪除容器c的最後乙個元素,返回void
c.pop_front() //刪除容器c的第乙個元素,返回void 只適用於list和deque容器
(4)賦值與swap
c1=c2刪除容器c1的所有元素,然後將c2的元素複製給c1
c1.swap(c2)交換內容:呼叫完該函式後,c1中存放的是c2原來的元素,c2中存放的則是c1原來的元素。c1和c2的型別必須相同,該函式的執行速度通常要比將c2複製到c1的操作快。
5、迭代器和迭代器範圍
*iter返回迭代器iter所指向的元素的引用
iter->mem對iter進行解引用,獲取指定元素中名為mem的成員,等效於(*iter).mem
vector和deque支援通過元素位置實現的隨機訪問,因此它們的迭代器可以有效地實現算數和關係運算。
用於計算vector物件的中點位置:
vector::iterator iter = vec.begin() + vec.size()/2
list容器的迭代器既不支援算數運算(加法或減法),也不支援關係運算(<=,<,>=,>),它只提供前置和後置的自增、自減運算以及相等(不等)運算。
listilist(vec.begin(),vec.end());
ilist.begin() + ilist.size()/2; //error
6、選擇容器型別的法則:
(1)如果程式要求隨機訪問元素,則應使用vector或deque容器
(2)如果程式必須在容器的中間位置插入或刪除元素,則應採用list容器
(3)如果程式不是在容器的中間位置,而是在容器首部或尾部插入或刪除元素,則採用deque容器
容器小結:
1、標準庫的順序容器有三個型別
vector:支援隨機訪問
list:不支援隨機訪問
deque:支援隨機訪問
2、 容器的常用操作:
插入:push_back(),insert()
刪除:erase()
訪問:back()
二、容器演算法:
使用泛型演算法必須包含algorithm標頭檔案:#include
標準庫還定義了一組泛化的算數演算法:#include
1、 演算法accumulate
int sum = accumulate(vec.begin(),vec.end(),42); //sum設定為vec的元素之和再加上42
string sum = accumulate(v.begin(),v.end(),string(「」));
2、 演算法replace
replace(ilist.begin(),ilist.end(),0,16); //把0替換為16
3、 演算法count
int times = count(ivec.begin(),ivec.end(),0); //替換出現的次數
4、 排序演算法
bool cmp(int i,int j)
int main()
vectorvec;
for(int i=10;i>-1;i--)
vec.push_back(i);
sort(vec.begin(),vec.end(),cmp);
for(int i=0;icout<< vec[i] << 「 」;
cout << endl;
return 0;
5、 find_if演算法
bool find_5(int i)
int main()
vectorvec;
for(inti=0;i<10;i++)
vec.push_back(i);
vector::iteratorit = find_if(vec.begin(),vec.end(),find_5);
if(it!=vec.end())
cout<< *it << endl;
return 0;
STL順序容器簡單應用
include include includeusing namespace std void main01 演算法和迭代器能無縫連線 int num1 count v1.begin v1.end 3 cout num1 endl 容器裝元素 class teacher void main02 容器...
容器 順序容器
容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...
第二部分《容器和演算法》 順序容器
標準庫定義了三種順序容器 vector,list,deque 同時標準庫還提供了三種容器介面卡 adaptor 介面卡是根據原始的容器型別所提供的操作,通過定義新的操作介面,來適應基礎的容器型別。順序容器介面卡包括stack queue priority queue型別。1.利用迭代器來進行元素的傳...