C++之容器vector

vector作为STL里面使用频率最高的容器,自然是有其方便的特性。与普通静态数组最明显的区别是vector作为一种动态数组能够自动进行扩展,可以根据使用的具体情况来决定数组的大小,由于是容器,除了动态数组本身提供的特性外,还支持各种数组的操作,例如遍历,查找,删除等以及STL中的算法,迭代器,这些都使得容器使用起来非常方便

动态数组的类型

vector实际上是一个用模板实现的数组类,数组的形式为:vector < Type > 数组名,其中Type可以为int,char,double,float等基本类型,也可以为容器类型,例如vector,map,set等,可以做如下一些类型声明:

vector<int> nums; //创建整形动态数组
vector<float> nums; //创建浮点型动态数组
vector<char> nums; //创建字符型动态数组
vector<vector<int>> nums; //创建二维数组,元素为整型
vector<set<int>> nums; //创建集合型动态数组
vector<map<int,int>> nums;//创建映射型动态数组

动态数组的初始化

动态数组的初始化有多种形式,可以根据实际的需要来选择一种初始化方式,以下举例说明了几种初始化的场景和方式(都以整型为例):

vector<int> nums; //如果只想定义一个数组,不需要赋予初值的定义方式
vector<int> nums(3,,1);//这种方式表示nums一开始有三个值都是1
vector<int> another_nums(nums);
vector<int> another_nums = nums;//这两种方式都表示将nums赋给另一个数组对象another_nums
vector<int> nums = {1,2,3,4,5,6,7};//这表示nums一开始的值有7个,从1~7
vector<int> nums_1 (nums.begin(),nums.begin()+5);//表示nums里面前五个元素赋给nums_1
//可以从䘝静态数组拷贝给动态数组
int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+7); //从数组中获得初值

动态数组的操作

动态数组vector作为一种顺序性容器,在内存中的特点是内存连续,这使得它的随机访问效率非常高,因为直接加上偏移量寻址即可。除了随机访问,还有很多数组的操作,以下列举了一些常见的数组的操作

//定义两个动态数组nums1,nums21)nums1.front();//返回nums1的第一个元素2)nums1.back(); //返回nums1的最后一个元素3)nums1.push_back(1); //在nums1的最后面插入一个值14)nums1.pop_back(); //把nums1的最后一个值弹出,也就是删除5)nums1.at(i)和nums1[i]; //返回nums1的下标为i的元素6)nums1.clear(); //清空nums1中的元素7)nums1.empty(); //判断nums1是否为空,空则返回ture,不空则返回false8)nums1.size(); //返回nums1的大小,即元素的个数;9)nums1.erase(nums1.begin()+1); //删除nums1中第2个元素10)nums1.capacity(); //返回nums1在内存中总共可以容纳的元素个数11)nums1.insert(nums1.begin()+3,6); //在nums1的第3个元素(从第0个算起)的位置插入数值612)nums1.swap(nums2); //交换nums1和nums2的内容13)nums1.resize(20); //将nums1的现有元素个数调至20个,多删少补,其值随机14)nums1==nums2; //判断两个数组是否相等,比较操作还有!=,>=,<=,>,<

动态数组源码

下面是vector的源码链接,感兴趣的朋友可以看看
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/vector?view=markup

动态数组的使用

C++容器的使用要加一个头文件,并且首字母为小写,例如动态数组就的头文件名字就是vector,集合加的头文件名字为set,很好记忆

#include<vector>

通常容器可以配合STL中的算法库使用,算法库也要加头文件,名字就是算法的英文

#include<algorithm>

猜你喜欢

转载自blog.csdn.net/Inthesilence/article/details/107266462