STL总结
Posted Prince_H_23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL总结相关的知识,希望对你有一定的参考价值。
Vector
1.初始化
- 数组初始化 int a[5] = {1,2,3,4,5}
- vector初始化 vector<int> A[10] = {1,2,3,4,5}
- vector<int> A(10, 1);
2.二维数组初始化赋值
- vector<vector<int>> f1(n, vector<int>(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<int>::iterator result = find(arr2.begin( ), arr2.end( ), arr1[i]);
if ( result == arr2.end( ) ) //如果没找见
4.遍历
- for(vector<int>::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<int>::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<int>()
- size()
- empty()
- push() 向队尾插入一个元素
- front() 返回队头元素
- back() 返回队尾元素
- pop() 弹出队头元素
priority_queue
- 没有clear()
- size()
- empty()
- push() 插入一个元素
- top() 返回堆顶元素
- pop() 弹出堆顶元素
- 大根堆插入-x就是小根堆
- 定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> 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
以上是关于STL总结的主要内容,如果未能解决你的问题,请参考以下文章