推荐视频:
STL高级用法 vector stack queue deque set map
Vector
1.初始化
- 数组初始化 int a[5] = {1,2,3,4,5}
- vector初始化 vector A[10] = {1,2,3,4,5}
- vector A(10, 1);
2.二维数组初始化赋值
- vector<vector> f1(n, vector(m,0));
3.常用函数
- 排序:sort(nums.begin(), nums.end());
- 插入:nums.insert(nums.begin(), x);
- 插入:nums.insert(nums.begin() + n , x);
- 删除:nums.erase(nums.begin());
- 返回元素个数:size()
- 返回是否为空:empty()
- 清空:clear()
- 末尾添加/删除:push_back()/pop_back()
- front()/back()
- 返回开始和结束的迭代器:begin()/end()
- []
- 支持比较运算(>,<),按字典序
- erase() (1) 输入是一个数x,删除所有x O(k + logn) k是x的个数
- 去重 alls.erase(unique(alls.begin(), alls.end()), alls.end());
- 查找 – vector中的find()
vector::iterator result = find(arr2.begin( ), arr2.end( ), arr1[i]);
if ( result == arr2.end( ) ) //如果没找见
4.遍历
- for(vector::iterator i = a.begin(); i != a.end(); i++) cout << *i << endl;
- for(auto i = a.begin(); i != a.end(); i++) cout << *i << endl;
- for(auto x : a) cout << x << endl;
5.参数
- int rows=triangle.size();//求得行数
- int col=triangle[0].size();//求的列数
String
1.常用函数
- 返回字符串长度:size()/length()
- 插入:str.insert(str.begin(), ‘a’)
- 返回子串:str.substr(起始坐标,(长度))
- 字符串添加元素:str.push_back(‘a’)
- 字符串删除末尾元素:str.pop_back(‘a’)
- 删除元素 str.substr(0, str.length() - 1);
- 删除元素 str.erase(str.end() - 1);
- 返回字符串所在字符数组的起始地址: c_str()
- 为空/清空 empty()/clear()
2.整型和字符串的相互转换
- 整型转字符串
- to_string(i)
- 字符串转整型
- int a=atoi(s.c_str());
- int b=stoi(s);
set(没有重复元素)
- set遍历
set::iterator it;
for(it=notAppearSet.begin ();it!=notAppearSet.end ();it++) cout << *it;
multiset(可以有重复元素)
map
- map<int, int> loc;
- map a[“yxc”] = 1
获取键、值 for(auto x : f1) x.first,x.second
查找:
s.find() 查找一个元素,如果容器中不存在该元素,返回值等于s.end()
if(numSet.find(findNum)!=numSet.end()
代表找到了
set, map, multiset, multimap(基于平衡二叉树(红黑树),动态维护有序序列)
- size()
- empty()
- clear()
- begin()/end()
- ++, – 返回前驱(前一个数)和后继(后一个数),时间复杂度 O(logn)
- set/multiset
- insert() 插入一个数
- find() 查找一个数
- count() 返回某一个数的个数
- erase()
(1) 输入是一个数x,删除所有x O(k + logn)
(2) 输入一个迭代器,删除这个迭代器
- lower_bound()/upper_bound()
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
- map/multimap
insert() 插入的数是一个pair
erase() 输入的参数是pair或者迭代器
find()
[] 注意multimap不支持此操作。 时间复杂度是 O(logn)
lower_bound()/upper_bound()
unordered_set,unordered_multiset,unordered_map,unordered_multimap
-和上面类似,增删改查的时间复杂度是 O(1)
-不支持 lower_bound()/upper_bound(), 迭代器的++,–
queue
- 没有clear(), 清空:q = queue()
- size()
- empty()
- push() 向队尾插入一个元素
- front() 返回队头元素
- back() 返回队尾元素
- pop() 弹出队头元素
priority_queue
- 没有clear()
- size()
- empty()
- push() 插入一个元素
- top() 返回堆顶元素
- pop() 弹出堆顶元素
- 大根堆插入-x就是小根堆
- 定义成小根堆的方式:priority_queue<int, vector, greater> q;
deque(效率慢)
- size()
- empty()
- push() 向队尾插入一个元素
- front() 返回队头元素
- back() 返回队尾元素
- pop() 弹出队头元素
pair<int, int>
定义
- pair底层是结构体
- pair<int, string> 存储一个二元组
- pair<int, pair<int, int>> 三元组
赋值/初始化 - p = make_pair(10, “yxc”)
- p = {10, “yxc”}
取到元素 - p.first
- p.second
stack
bitset
- bitset<10000> s;
- ~, &, |, ^
- , <<
- ==, !=
- []
- count() 返回有多少个1
- any() 判断是否至少有一个1
- none() 判断是否全为0
- set() 把所有位置成1
- set(k, v) 将第k位变成v
- reset() 把所有位变成0
- flip() 等价于~
- flip(k) 把第k位取反
auto 自动推断类型
- auto x = max_element(a.begin() + i, a.end());用的时候*x
以上不足的地方欢迎指出讨论,觉得不错的朋友,希望能得到您的点赞支持