一.容器適配器
1.stack
需要引入的頭文件:
#include<stack>
初始化方式:
stack<int> stk;
成員函數介紹:
stk.empty(); //判斷stack是否為空,為空返回true,否則返回false
stk.size(); //判斷stack中元素的個數
stk.pop(); //刪除棧頂元素,但不返回其值
stk.top(); //返回棧頂元素的值,但不刪除此元素
stk.push(item) //在棧頂壓入新元素item
2.queue
需要引入的頭文件:
#include<queue>;
初始化方式:
queue<int> q;
成員函數介紹:
q.empty(); //判斷隊列是否為空
q.size(); //返回隊列長度
q.push(item); //對於queue,在隊尾壓入一個新元素
//對於priority_queue,在基於優先級的適當位置插入新元素
q.front(); //返回隊首元素的值,但不刪除該元素
q.back(); //返回隊尾元素的值,但不刪除該元素
q.top(); //返回具有最高優先級的元素值,但不刪除該元素
二、常用容器用法介紹
1.vector
需要引入的頭文件:
#include<vector>
using namespace std;
初始化方式:
vector<int>obj;
成員函數介紹:
push_back 在數組的最后添加一個數據
pop_back 去掉數組的最后一個數據
at 得到編號的位置數據
begin 得到數組頭的指針
end 得到數組的最后一個單元+1的指針
front 得到數組頭的引用
back 得到數組的最后一個單元的引用
max_size 得到數組最大可以是多大
capacity 當前數組分配的大小
size 當前使用數據的大小
resize 改變當前使用數據的大小
reserve 改變當前vector所分配空間的大小
erase 刪除指針指向的數據項
clear 清空當前的vector
rbegin 將vector反轉后的開始指針返回(其實就是原來的end-1)
rend 將vector反轉構的結束指針返回(其實就是原來的begin-1)
empty 判斷vector是否為空
swap 與另一個vector交換數據
實際上vector是一個動態數組,這樣就無需在使用前聲明數組的大小,在使用中動態分配。
二維數組的定義:
int N=5, M=6;
vector<vector<int> > obj(N); //定義二維動態數組大小5行
for(int i =0; i< obj.size(); i++)//動態二維數組為5行6列,值全為0
{
obj[i].resize(M);
}
2.deque
所謂的deque是”double ended queue”的縮寫,雙端隊列不論在尾部或頭部插入元素,都十分迅速。而在中間插入元素則會比較費時,因為必須移動中間其他的元素。雙端隊列是一種隨機訪問的數據類型,提供了在序列兩端快速插入和刪除操作的功能,它可以在需要的時候改變自身大小,完成了標准的C++數據結構中隊列的所有功能。
需要引入的頭文件:
#include<deque>
初始化方式:
deque<int> deq;
成員函數介紹:
deq[ ]:用來訪問雙向隊列中單個的元素。
deq.front():返回第一個元素的引用。
deq.back():返回最后一個元素的引用。
deq.push_front(x):把元素x插入到雙向隊列的頭部。
deq.pop_front():彈出雙向隊列的第一個元素。
deq.push_back(x):把元素x插入到雙向隊列的尾部。
deq.pop_back():彈出雙向隊列的最后一個元素。
3.list
需要引入的頭文件:
#include <list>
初始化方式:
list<int>lst1; //創建空list
list<int> lst2(5); //創建含有5個元素的list
list<int>lst3(3,2); //創建含有3個元素的list
list<int>lst4(lst2); //使用lst2初始化lst4
list<int>lst5(lst2.begin(),lst2.end()); //同lst4
成員函數介紹:
l.assign() 給list賦值
l.back() 返回最后一個元素
l.begin() 返回指向第一個元素的迭代器
l.clear() 刪除所有元素
l.empty() 判斷list是否為空
l.end() 返回末尾的迭代器
l.erase() 刪除一個元素
l.front() 返回第一個元素
l.insert() 插入一個元素到list中
l.max_size() 返回list能容納的最大元素數量
l.merge() 合並兩個list
l.pop_back() 刪除最后一個元素
l.pop_front() 刪除第一個元素
l.push_back() 在list的末尾添加一個元素
l.push_front() 在list的頭部添加一個元素
l.resize() 改變list的大小
l.reverse() 把list的元素倒轉
l.size() 返回list中的元素個數
l.sort() 給list排序
l.splice() 合並兩個list
l.swap() 交換兩個list
l.unique() 刪除list中相鄰重復的元素
3.map
需要引入的頭文件:
#include<map>
初始化方式:
map<int,string> ID_Name;
map<int, string> ID_Name = {
{ 2015, "Jim" },
{ 2016, "Tom" },
{ 2017, "Bob" } };
成員函數介紹:
begin() 返回指向map頭部的迭代器
clear() 刪除所有元素
count() 返回指定元素出現的次數
empty() 如果map為空則返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊條目的迭代器對
erase() 刪除一個元素
find() 查找一個元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比較元素key的函數
lower_bound() 返回鍵值>=給定元素的第一個位置
max_size() 返回可以容納的最大元素個數
rbegin() 返回一個指向map尾部的逆向迭代器
rend() 返回一個指向map頭部的逆向迭代器
size() 返回map中元素的個數
swap() 交換兩個map
upper_bound() 返回鍵值>給定元素的第一個位置
value_comp() 返回比較元素value的函數
4.set
1. begin()--返回指向第一個元素的迭代器
2. clear()--清除所有元素
3. count()--返回某個值元素的個數
4. empty()--如果集合為空,返回true
5. end()--返回指向最后一個元素的迭代器
6. equal_range()--返回集合中與給定值相等的上下限的兩個迭代器
7. erase()--刪除集合中的元素
8. find()--返回一個指向被查找到元素的迭代器
9. get_allocator()--返回集合的分配器
10. insert()--在集合中插入元素
11. lower_bound()--返回指向大於(或等於)某值的第一個元素的迭代器
12. key_comp()--返回一個用於元素間值比較的函數
13. max_size()--返回集合能容納的元素的最大限值
14. rbegin()--返回指向集合中最后一個元素的反向迭代器
15. rend()--返回指向集合中第一個元素的反向迭代器
16. size()--集合中元素的數目
17. swap()--交換兩個集合變量
18. upper_bound()--返回大於某個值元素的迭代器
19. value_comp()--返回一個用於比較元素間的值的函數
