c++中常用的容器

最近在學習數據結構和算法,遇到了一些容器,對容器的使用還不太瞭解,所以想在學習的過程中,把自己使用到的容器的用法記錄下來。

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;

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章