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;

 

 

 

 

 

 

 

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