本文是关于c++中常用的数组
vector
的一些常见用法的总结, 主要是一些常用的调用方法, 主要是我的平时的leetcode题解中经常会使用的.
数组 vector
一般大家应该都学习过C语言, 在C语言中, 数组通常使用int[]
来表示, 但是在使用的过程中, 通常会出现一些麻烦(大佬轻喷), 比如静态初始化大小不能直接使用参数而是一个常量, 动态申请空间需要使用malloc
等. 虽然手动分配内存可能会给代码带来一定的效率提升, 但是复杂的细节操作让我这个从python
转来刷题应试的小白很难接受呀.
所以一般直接使用标准库提供的vector
(很多人都是这么建议的), 这个是比int[]
更加的高级的容器, 可以自动扩容, 让你不需要操心细节, 非常nice👨💻!
那么接下来我们来看一下vector的一些常见用法吧:
常见用法
首先需要导入标准库
1 |
初始化
一维数组初始化
1 | vector<int> res1; //简单初始化一个空数组 |
二维数组初始化
1 | vector<vector<int>> res1; // 初始化一个二维数组; |
其中的元素也可以是其他类型, 例如string
, bool
等.
查询属性
数组大小
1
res.size(); // 返回数组的大小
判断数组是否为空
1
res.empty();
返回数组头的指针
1
res.begin();
返回数组尾+1的指针, 注意是指向最后的后一个, 也就是空
1
res.end();
得到数组头的引用
1
res.front();
得到数组尾的引用
1
res.back();
增删改查
增加元素
1
res.push_back(元素); // 在尾部插入一个元素
删除元素
1
2res.pop_back(元素); // 删除最后一个元素
res.erase(res.begin() + i); // 删除第i个元素修改元素
1
res[pos] = 值; // 直接在第pos个位置修改为某个值
查找元素(按索引查找)
1
res[pos]; // 直接查找第pos个位置的元素
那如果想查找值是否在数组中(按值查找)
vector
没有直接的方法, 就需要使用标准库中的find方法来查找(这也是我写这篇的起因, 以后还有不懂的就加进来).1
2
find(res.begin(), res.end(), key); // 返回范围内第一个等于给定key的元素位置指针, 一般用于判断是否存在
其他
重新定义数组大小
1
res.resize(m); // 数组大小重新定义为m
清空数组
1
res.clear(); // 清空数组
与另一个数组交换数据
1
swap(res1, res2); // res1与res2交换数组
数组求和 需要借助库函数
numeric
实现1
2
accumulate(nums.begin(), nums.end(), 0) // 从0为基准开始求和数组排序 需要借助库函数
algorithm
实现1
2
3
sort(nums.begin(), nums.end()); // 数组升序
sort(nums.begin(), nums.end(), greater<int>()); // 数组降序对于二维数组, 也可以自定义cmp函数, 实现一列升序, 一列降序的方法.
1
2
3
4
5
6
7
8
9// 按照第一列降序排序
// 第一列相等按照第二列升序
static bool cmp(vector<int> &a, vector<int> &b){
if(a[0] != b[0])
return a[1] < b[1];
return a[0] > b[0];
}
sort(nums.begin(), nums.end(), cmp);
以上加粗的也是比较常用的, 其实也很简单啦, 不用很复杂的操作.
个人收获
这些方法对比python
的list
来学其实很简单, 只不过换了一个函数名而已, 当然还是有很多操作不一样, 比如指针操作, 记住就好了, 积少成多, 熟能生巧!