最近在学习数据结构和算法,遇到了一些容器,对容器的使用还不太了解,所以想在学习的过程中,把自己使用到的容器的用法记录下来。
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;