cpp 超常用tips! -- 每天一个写bug小技巧

这篇博客分享了C++中的一些实用技巧,包括如何将char转换为string,如何翻转字符串,使用printf,以及深入探讨STL中的lower_bound、upper_bound、vector和map的操作,如初始化二维数组,删除、插入、排序、复制元素,以及在map和multimap中的特定操作。
摘要由CSDN通过智能技术生成

string

怎么把单个char字符转为string:

link

翻转字符串

reverse(s.begin(), s.end());

printf

%type
cchar
dint
sstring
ffloat
efloat 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, 要删掉重复元素,有三个必需步骤

  1. 排序
  2. 找出unique
  3. 删除
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. 其他

  1. v.front() 返回vector的第一个元素引用
  2. 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值