自己救自己系列, 找工作刷题做点总结。今年找工作形式这么严峻,我还能怎么办?我也很绝望啊!
vector刷题时候用的地方也太多了吧,这个要熟练掌握啊
1、定义
1)vector数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组!
2)和普通数组一样可以通过下标索引来进行访问
3)与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好。
参考: https://www.cnblogs.com/yskn/p/9053161.html
2、初始化
vector<T> a; //初始化一维数组 T表示数据类型,如int, float, string
vector<vector<T>> b; //初始化二维数组
vector<T> a(n,i); //初始化一维数组a中包含n个i
vector<vector<int>> b(m, vector<T>(n,1)) //初始化二维数组b[m][n]为1
/*
今天刷题遇到:
str = "asd";
vector<string> tmp(1, str);
死活搞不懂(1, str)什么意思
后来发现失了智, 那不就是对tmp初始化1个str吗?
*/
3、使用
//获得长度
a.size()
//判断是否为空
a.empty() //空返回true,否则返回false
//获得二维数组的行列
int row = b.size(); //获得行数
int col = b[0].size(); //获得列数
//排序
sort(a.begin(), a.end()) //注意是begin(),不是start()
//元素添加删除操作
a.push_back(1); //末尾添加一个元素1
a.pop_back(); //删除末尾元素
a.back(); //访问最后一个元素
a.insert(a.begin(), elem); //在a序列首位添加一个元素elem
4、lower_bound 和 upper_bound
lower_bound: 返回有序数组中不小于指定num的第一个数。
upper_bound: 返回有序数组中大于指定num的第一个数。
//利用lower_bound实现插入排序
auto it = lower_bound(res.begin(), res.end(), num);
res.insert(it, num);
👆题目练习: 牛客网->剑指offer63题 :数据流中的中位数
以后刷到哪里再更
5、题目练习
数组的二分法 查找排序数组中某元素的第一个和最后一个
字母异位词分组 这个题目可以冷静区分一下vector和单独的string的区别
加一 练习一下首位插入