C++中常用的两种创建动态数组方法:new()和vector.
1、new 方法:int *p=new int[num];创建一个容量为num的int型数组,num可来自外部输入、函数传递等,int型指针p指向动态数组的首地址,在动态数组创建完成后,我们可以下标访问数组元素:p[0],p[1]...,但是new方法不能创建二维数组,只能创建一维数组,并且创建后数据元素操作缺乏灵活性;用得最多的地方当属创建链表结点;
2、vector容器:能够存放任意类型的动态数组(C++中更加常用,注意Java中的是Vector类),常用基本操作:
(1)头文件#include<vector>.
(2)创建一维vector对象,vector<int> vec;二维vector<vector<int>> vec2;
(3)尾部插入数字:vec.push_back(a);
(4)尾部元素弹出:vec.pop_back();相当于删除尾部元素;
(5)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的,和数组的访问形式一样。
(6)插入元素:vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素:vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)初始化赋值:
vector c1(c2) // 复制一个vector(c2也是一个vector)
vector c(n) // 创建一个vector,含有n个数据,数据均已缺省构造产生
vector c(n, elem) // 创建一个含有n个elem元素的vector
vector c(beg,end) // int array[]={1,2,3},beg=array,end=array+3,用数组为vector赋值
(11)判断是否为空:vec.empty();
自定义排序时:sort(vec.begin(),vec.end(),Comp);Comp可以自定义。
另附C++标准容器分类表(网上有多个版本,我认为这个更容易理解):
标准容器类 |
特点 |
顺序性容器 |
|
vector |
从后面快速的插入与删除,直接访问任何元素 |
deque |
从前面或后面快速的插入与删除,直接访问任何元素 |
list |
双链表,从任何地方快速插入与删除 |
关联容器 |
|
set |
快速查找,不允许重复值 |
multiset |
快速查找,允许重复值 |
map |
一对多映射,基于关键字快速查找,不允许重复值 |
multimap |
一对多映射,基于关键字快速查找,允许重复值 |
容器适配器 |
|
stack |
后进先出 |
queue |
先进先出 |
priority_queue |
最高优先级元素总是第一个出列 |
参考:
https://blog.csdn.net/Jin_Kwok/article/details/51361575