文章目录
string
怎么把单个char字符转为string:
翻转字符串
reverse(s.begin(), s.end());
printf
% | type |
---|---|
c | char |
d | int |
s | string |
f | float |
e | float in exp |
p | 指针 |
STL
lower_bound & upper_bound
lower_bound(begin(v), end(v), i);
return an iterator pointing to the first element in the range [first, last) that is not less (equal or greater than) the given value : $i$
upper_bound(begin(v), end(v), i);
return an iterator pointing to the first element in the range [first, last) that is greater than the given value : $i$
vector
1. 初始化
vector<T>
T是类型,如int,string.
1.1 创造n行m列二维数组
vector<vector<int> > Matrix(n, vector<int>(m));
2. 删除
2.1 clear
清空所有元素
2.2 erase
vector<int> v;
v.push_back(1);
v.push_back(2);
v.erase(v.begin()+1); //删掉2
或者也可以删掉vector中的一段
v.erase(v.begin(),v.begin()+1);
2.3 pop_back
删掉vector的最后一个元素
2.4 删除重复元素
现在有一个vector res, 要删掉重复元素,有三个必需步骤
- 排序
- 找出unique
- 删除
sort(res.begin(), res.end());
res.erase(unique(res.begin(), res.end()), res.end());
这里vector不局限于vector<int>
,可以是二维数组 vector<vector<int> > res
。
3. 插入
3.1 insert
vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
vector.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
4. 排序
sort(v.begin(),v.end());
得到升序排列的vector
sort(v.begin(), v.end(),less<int>()); //升序排列
sort(v.begin(), v.end(),greater<int>()); //降序排列
5. 复制
局部复制:本来有一个vector v1
, 想把v1的从begin_idx到end_idx的元素复制到v2
从位置i开始的长度为(end_idx-begin_idx+1)的sub vector中
copy(v1.begin()+begin_idx, v1.begin()+end_idx, v2.begin()+i );
假设有两个vector:
vector<int> v1({1,2,3});
vector<int> v2({10,20,30,40});
copy(v1.begin(), v1.end(), v2.begin()+1);
// 10,1,2,3
把 v1 的内容复制到 v2 从位置1开始的空间
6. 其他
- v.front() 返回vector的第一个元素引用
- v.back() 返回vector的最后一个元素引用
map
c++ map 相当于python 中的dict, 一个关键词对应一个值(multimap可以对应多个值)
map默认是排好序的,如果有需要用到排序的对,那么可以创建map来维护数据结构。
那么如果要取根据关键词(key)排序的元素的最后一位应该怎么做呢:
最后一位元素
auto iter = my_map.crbegin();
multimap
取键值为某个值的所有pair
auto range = mydict.equal_range(key);