順序容器:vector deque list
介面卡:根據原始容器型別所提供的操作,通過定義新的操作介面,適應基礎的容器型別。
容器元素初始化:
cc; //預設建構函式
cc(n);//n個值初始化,只適用於順序容器,必須給出缺省建構函式
cc(n,t); //n個t只適用於順序容器,可以不給,但要給出 t(t)建構函式。
cc(begin,end);//begin,end複製到c中
cc1(c2);//c1和c2是相同的容器型別,存放相同型別元素,c2拷貝給c1
如果想要把不同容器的元素相互賦值,則可用第4個建構函式或用assign。
迭代器的行為像指標。
用作容器型別要遵循2個條件
1.能賦值運算。
2.能複製。
注意:引用型別不能複製和賦值。io流也不支援複製。
vector deque隨機儲存
list 鍊錶
注意迭代器失效問題。
difference_type 儲存兩個迭代器差值的有符號整型,可為負數
value_type 元素型別
reference 元素左值型別,value_type&
const_reference 元素常量左值型別,const value_type&
size_type 無符號整型
const_iterator
reverse_iterator
const_reverse_iterator
時刻更新迭代器,不然會出現迭代器失效問題。
insert都是插在iter的前面。
iterator insert(iter,n); //n插入iter前面,返回新元素的迭代器
void insert(iter,begin,end); //begin end插入iter前面。
void insert(iter,n,t); n個t插入iter前。
如果容器元素支援的比較符,可以讓容器整體比較。
如 vectorc1,c2; c1==c2;
c.size()
c.max_size();
c.empty();
c.resize(n); //改變c的長度
c.resize(n,t);
reference c.back() ; //得到最後元素的引用
reference c.front(); //得到最前面元素的引用
c.at(n)==c[n];
c.clear();//清空
c.erase(iter); //返回iter後面的元素
c.erase(begin,end);//返回begin,end後面的元素
pop_front()和front()經常一起使用。
iterator find(begin,end,value);//找到value出現的第乙個地方。
string 增加的建構函式:cp為空字元結尾的陣列
1.string s(cp,n); //cp指向的陣列的前n個元素。
2.string s(s2,pos2);//s2中從pos2開始複製給s
3.string s(s2,pos2,len);//s2中從pos2開始複製len個字元給s
string特有函式:
1.s.insert(pos,s2);//pos前插入string物件,,,pos為int
2.s.insert(pos,s2,pos,len);//pos前插入s2從pos開始的len長度
3.s.insert(pos,cp,len);//pos前插入cp的前len個字元
4.s.insert(pos,cp);//pos前插入cp
5.s.assign(s2); //s2賦值給s
6.s.assign(cp,len);//cp的len個字元給s
7.s.assign(cp);//cp賦給s
8.s.erase(pos,len);//刪除從pos開始的len長
9.s.substr(pos,n);//返回乙個string字串,包含從pos開始的n個字元。
10.s.substr(pos);//返回string字串,包含從pos開始的
11.s.substr();//返回s的副本
2.s.replace(pos,len,args);//將args的元素替換 pos開始長為len的字元。
3.s.replace(b,e,args);//args的元素替換b,e 的所有字元
args可為:
1.s2
2.s2,pos,len
3.cp
4.cp,len
5.n,c
6.b2,e2; //迭代器
string提供的查詢函式
1.s.find(args);
2.s.rfind(args);
3.s.find_first_of(args);//args中任意字元第一次出現的位置
4.s.find_last_of(args);
5.s.find_first_not_of(args);//查詢第乙個不屬於args的字元
6.s.find_last_not_of(args);//最後乙個不屬於args的字元
args為:
1.c,pos //從pos開始,查詢字元c,預設pos=0
2.s2,pos //pos開始查詢string s2 pos預設為0
3.cp,pos //pos開始查詢cp(cstring) pos預設為0
4.cp,pos,n //pos開始查詢cp所指向的陣列的前n個字元
string 的compare函式
1.s.compare(s2);
2.s.compare(pos1,n1,s2); //從pos1開始的n1個字元與s2做比較
3.s.compare(pos1,n1,s2,pos2,n2); //從pos1開始的n1個字元與s2從pos2開始的n2個字元比較
4.s.compare(cp) ;//與char* 比較
5.s.compare(pos1,n1,cp);//從pos1 開始的n1個字元與cp比較
6.s.compare(pos1,n1,cp,n2);//pos1開始的n1個字元與cp的前n2個字元比較。
介面卡:容器介面卡,迭代器介面卡,函式介面卡
預設deque stack和queue
vector priority_queue
當然可以改變關聯容器。
如stack>
stack的關聯容器為順序容器
queue的關聯容器必須支援push_front();
priority_queue 的關聯容器必須提供隨機訪問。
priority_queue設定優先順序插入。
《C primer》 順序容器
順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出 lifo 棧 queue 先進先出 fifo 棧 priority queue 有優先順序管理的佇列 容器元素型別必須滿足條件 1.支援賦值運算,2.物件可以賦值 因為...
C Primer 筆記 順序容器
將單一元素型別聚集起來成為容器,然後根據位置來儲存和訪問這些元素 vectorivec listslist dequedstr vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 stack 後進先出 lifo 棧 queue 先進先出 fifo 佇列 priorit...
C primer 順序容器(3)
前幾篇主要是把vector與string放在一起討論,本篇主要是將list與forward list放在一起比較 list故名思義就是列表的意思。首先我們來看看列表與我們之前討論的vector和string有什麼區別。2.正因為這個特點,如果list要訪問容器中的某一元素,就得遍歷整個容器。使得訪問...