最近在學習數據結構和算法,遇到了一些容器,對容器的使用還不太瞭解,所以想在學習的過程中,把自己使用到的容器的用法記錄下來。
1 vector
一個容器常常需要涉及到對容器中數據的增,刪,改,查操作,在vector中涉及到的函數有:
(1)增
push_back()函數:對vector的隊尾添加一個元素
vector<int> data;
// 在隊尾添加整型元素3
data.push_back(3);
insert()函數:在vector的某個位置添加一個元素
vector<int> data;
// 在第三個元素添加元素3 (數據添加的位置不能超過vector的索引範圍)
// 情況1:這時候data的容量只有1,如果在第二個位置添加元素,將不會成功
data.insert(data.begin()+2,3);
// 情況2:需要給vector分配內存,初始化數據
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
data.insert(data.begin()+2,3);
// 輸出結果
// 0 1 3 2
(2)刪
pop_back()函數:刪除最後一個元素
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
// 0 1 3 2
data.insert(data.begin()+2,3);
// 刪除最後一個數據
// 0 1 3
data.pop_back();
erase()函數:刪除某個元素,或者刪除某個區間的元素
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
// 0 1 3 2
data.insert(data.begin()+2,3);
// 情況1:刪除某個元素,需要使用指針獲取要刪除數據的位置
// 1 3 2
data.erase(data.begin());
// 情況2:刪除某個區間的元素:[) 前閉後開
// 3 2
data.erase(data.begin(),data.begin()+2);
(3)改
assign(n,value)函數:重新給vector分配能夠存儲n的元素,初始值爲value的內存空間
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
// 0 1 3 2
data.insert(data.begin()+2,3);
// 重新分配vector的內存大小和數據
// 注意:分配之後的內存一定大於等於之前的
// 2 2 2 2 2 2
data.assign(6,2);
(4)查
data[i]:直接索引vector第i個元素
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
// 0 1 3 2
data.insert(data.begin()+2,3);
// 索引首個元素
// 0
cout << data[0] << endl;
begin()和end()函數:返回vector的最開始和最結尾的指針
// 使用begin()和end()可以打印vector的所有數據
void showVector(vector<int> data){
// 使用迭代器打印數據
vector<int>::iterator it;
for (it = data.begin(); it != data.end(); it++)
cout << *it <<endl;
}
front()和back()函數:得到vector首個和最後一個數據
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
data.insert(data.begin()+2,3);
// 獲得首個元素
cout<<data.front()<<endl;
// 獲得最後一個元素
cout<<data.back()<<endl;
resize()函數:給vector重新分配內存大小
vector<int> data;
for(int i =0; i<3;i++)
data.push_back(i);
data.insert(data.begin()+2,3);
// 給vector重新分配內存,如果分配之後的比之前的大,多餘的部分設置爲0
// 0 1 3 2 0 0 0 0 0 0
data.resize(10);
如果一個類的成員變量是vector,在初始化的時候需要給vector分配內存大小,分配內存大小的過程應該放在構造函數中進行。
size()和capacity()函數:前者獲得vector當前容納元素的個數,後者獲得vector所能容納的數量
vector<int> data(10);
for(int i =0; i<3;i++)
data.push_back(i);
// 3
cout << "size = "<<data.size()<<endl;
// 10
cout << "capacity = "<<data.capacity()<<endl;
2 queue
queue是一個先進先出的隊列,就像我們喫飯排隊一下,先到先得。
(1)增
push()函數:向隊列中添加一個數據
queue<int> q;
// 添加數據
q.push(1);
q.push(2);
(2)刪
pop()函數:刪除首個隊列中首個元素
// 彈出首個元素
q.pop();
// 1
// front()函數可以獲得首個元素
cout << q.fron()<<endl;
(3)查
front()和back()函數:得到隊列首個元素和末尾的元素
queue<int> q;
// 增加數據
q.push(1);
q.push(2);
q.push(3);
q.pop();
// 2
cout << q.front()<< endl;
// 3
cout <<q.back() << endl;
empty():判斷queue是否爲空
cout << "q is empty = " << q.empty() <<endl;
size():得到queue中元素的個數
cout << " the size of q is = " <<q.size() <<endl;