1.容器=資料結構+演算法。相當於是為複雜的資料設計一種專門用於存放該資料的東西。用於開發中傳遞複雜的資料。
2.模板函式只能寫在標頭檔案中,不能單獨宣告。
3.stl容器分為三類:
(1).順序容器類
vector 陣列。查詢快,插入慢。加入的資料與資料大小有關
操作: empty() – 返回bool型,表示vector是否為空
(v.empty() )
size() – 返回vector內元素個數 (v.size() )
push_back(data_type a) 將元素a插入最尾端
pop_back() 將最尾端元素刪除 v[i] 類似陣列取第i個位置的元素(v[0] )
#include
#include
#include
using
namespace
std;
int main()
cout
<< "size: "
<< a.size() << endl;
a.pop_back();
a[0] = 1;
cout
<< "size: "
<< a.size() << endl;
for (int i = 0; i < (int)a.size(); ++i)
cout
<< endl;
return
0; }
deque 陣列。採用雜湊對映。
list 鍊錶 。插入快,查詢慢。
(2).關聯式容器
與順序容器的最大區別為:容器類的東西與加入順序無關,在插入時就會排序。
set 元素不能重複
multiset 可以重複
操作: s.insert(elem) – 安插乙個elem副本,返回新元素位置。 s.erase(elem) – 移除與elem元素相等的所有元素,返回被移除 的元素個數。 s.erase(pos) – 移除迭代器pos所指位置上的元素,無返回值。 s.clear() – 移除全部元素,將整個容器清空。
#include
#include
#include
using
namespace
std;
int main()
cout
<< "find:"
<< endl;
iter1 = s1.find("abc");
if(iter1 != s1.end()) else
return
0;}
#include
#include
#include
using
namespace
std;
struct t1
};int main();
t1 tt;
tt.key=5;
tt.value1=22;
tt.value2=88;
s.insert(t);
s.insert(tt);
cout
<< "iterate:"
<< endl;
for (iter1 = s.begin(); iter1 != s.end(); iter1++)
cout
<< "find:"
<< endl;
iter1 = s.find(t);
if(iter1 != s.end()) else
return
0;}
操作: s.size() – 返回容器大小。 s.empty() – 返回容器是否為空。 s.count(elem) – 返回元素值為elem的元素的個數。 s.lower_bound(elem) – 返回elem的第乙個可安插的位置。 也就是「元素值》= elem的第乙個元素位置」。 s.upper_bound(elem) – 返回elem的最後乙個可安插的位置。 也就是「元素值 > elem的第乙個元素的位置」。 以上位置均為乙個迭代器。 s.begin() – 返回乙個雙向迭代器,指向第乙個元素。 s.end() – 返回乙個雙向迭代器,指向最後乙個元素的下一 個位置
map 儲存有序,根據鍵來排序,不能重複
multimap 與map相同,可以重複
操作: m.size() 返回容器大小
m.empty() 返回容器是否為空
m.count(key) 返回鍵值等於key的元素的個數
m.lower_bound(key) 返回鍵值等於key的元素的第乙個可安插 的位置
m.upper_bound(key) 返回鍵值等於key的元素的最後乙個可安 插的位置
操作: m.begin() 返回乙個雙向迭代器,指向第乙個元素。 m.end() 返回乙個雙向迭代器,指向最後乙個元素的下乙個 位置。 m.clear() 講整個容器清空。 m.erase(elem) 移除鍵值為elem的所有元素,返回個數,對 於map來說非0即1。 m.erase(pos) 移除迭代器pos所指位置上的元素。 直接元素訪問: m[key] = value; 查詢的時候如果沒有鍵值為key的元素,則安插乙個鍵值為key的新元素,實值為預設(一般0)。
#include
#include
#include
using
namespace
std;
int main()else
cout
<< "iterate"
<< endl;
for(m2i = m2.begin(); m2i != m2.end(); m2i++)
return
0;}
(3).容器介面卡
stack
操作: empty() – 返回bool型,表示棧內是否為空 (s.empty() )
size() – 返回棧內元素個數 (s.size() )
top() – 返回棧頂元素值 (s.top() )
pop() – 移除棧頂元素(s.pop(); )
push(data_type a) – 向棧壓入乙個元素 a(s.push(a); )
#include
#include
#include
using
namespace
std;
int main()
else return
0; }
queue(佇列,先進先出)
標頭檔案: #include
操作: empty() – 返回bool型,表示queue是否為空 (q.empty() )
size() – 返回queue內元素個數 (q.size() )
front() – 返回queue內的下乙個元素 (q.front() )
back() – 返回queue內的最後乙個元素(q.back() )
pop() – 移除queue中的乙個元素(q.pop(); )
push(data_type a) – 將乙個元素a置入queue中(q.push(a); )
#include
#include
#include
using
namespace
std;
int main()
priority_queue(優先佇列)
乙個擁有權值觀念的queue,自動依照元素的權值排列,權值最高排在前面。預設情況下,priority_queue是利用乙個max_heap完成的
操作: q.push(elem) 將元素elem置入優先佇列 q.top() 返回優先佇列的下乙個元素 q.pop() 移除乙個元素 q.size() 返回佇列中元素的個數 q.empty() 返回優先佇列是否為空.
#include
#include
#include
using namespace std
;#define pow2(a) ((a)*(a))
#define dist2(x, y) (pow2(x) + pow2(y))
struct coord
};int main()
c STL 容器 聯合容器
stl提供了四種聯合容器 set,multiset,map,multimap set and multiset在標頭檔案 map and multimap在標頭檔案 模板函式都一樣的 set map中迭代器不能 或 因為不是連續的序列,是樹。set 在set中,值就是關鍵字,集合中不會有多個相同的關...
C STL中的容器
用c 寫資料結構習題也有一段時間了,不得不說stl容器對資料結構真的很有用。c stl standard template library,標準模板庫 是一套功能強大的 c 模板類,其中包含4個元件,分別為演算法 容器 函式 迭代器。所以想總結一下自己用的容器,為什麼要用它以及怎麼用?c c 原生的...
c STL中的容器
容器作為stl的重要組成部分,其主要包括兩大類 順序容器 和 關聯容器 雖說這二者都是用來儲存資料的資料結構,但是他們的底層實現和特長有很大差別 關聯容器有8種 1 map 紅黑樹 2 set 紅黑樹 3 multimap 紅黑樹 4 multiset 紅黑樹 5 unordered map 雜湊表...