1. 概念及定义
- 什么是容器?
在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对象的指针,这种对象类型就叫容器。容器就是保存其它对象的对象,也是用来管理某类对象。
举个例子,书架就类似与一个容器,在这个书架上我们可以放书本、杂志等,书架可以看作是个对象,容器中可以放入不同的对象,容器本身也是一个对象,之所以选择用容器,就是因为方便管理。总而言之,c++是面向对象的,系统有很多中不同类型的对象组成,这个对象实力化后,对象必须分门别类的放到这些集合类中,这个集合类就是各种各样的容器。
- 容器类型:vector、list、deque
在这里仅对vector & deque作探讨。
vector : 是一种序列式容器,事实上和数组差不多,但它比数组更优越。数组不能够动态拓展,在程序运行过程中容易浪费内存和数组越界。vector相当于可拓展的数组,随机访问快,但在中间插入和删除慢,末端插入和删除快,支持随机访问。
vector<int> vecTemp //定义一个整型vector
for (int i=0; i<6; i++)
{
vecTemp.push_back(i);
}
deque : 是由一段一段的定量连续空间构成,一旦要在deque的前端和尾增加新空间,配置一段定量连续空间,串在整个头部和尾部即可,deque在分段的连续空间维护整体连续并提供随机存取的接口。可在双端进行pop/push
2. 写法
- vector<类型> 标识符;//空的向量
- vector<类型> 标识符(容量); //vector v(10);
- vector<类型> 标识符(最大容量,初始所有值)
- vector< vector >v; //二维向量
- v.push_back(100); //添加元素
- int size = v.size(); //元素个数
- bool isEmpty = v.empty(); //判断是否为空
- v.pop_back(); //删除末尾元素
- vector::iterator iter = v.begin(); //获取迭代器首地址
- v1.clear(); //清空元素
- 遍历
int length = vec1.size();
for ( int i=0;i<length;i++)
{
cout<<vec1[i];
}
cout<<endl<<endl;
// 迭代器法
vector< int >::const_iterator iterator = vec1.begin();
for (;iterator != vec1.end();iterator++)
{
cout<<*iterator;
}
3. 案例
- 在容器最后移除和插入数据
int main(int argc, char *argv[])
{
vector<int>obj;//创建一个向量存储容器 int
for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据
{
obj.push_back(i);
cout<<obj[i]<<",";
}
for(int i=0;i<5;i++)//去掉数组最后一个数据
{
obj.pop_back();
}
cout<<"\n"<<endl;
for(int i=0;i<obj.size();i++)//size()容器中实际数据个数
{
cout<<obj[i]<<",";
}
return 0;
}
- clear容器中数据
vector<int>obj;
for(int i=0;i<10;i++)//push_back(elem)在数组最后添加数据
{
obj.push_back(i);
cout<<obj[i]<<",";
}
obj.clear();//清除容器中所以数据
for(int i=0;i<obj.size();i++)
{
cout<<obj[i]<<endl;
}
参考
1.各容器简单介绍
2. https://blog.csdn.net/u014465639/article/details/70241850
3.C++ vector 容器浅析