判断元素在不在容器中
常用容器: vector, set, map
vector
1 | int x = 3; |
set/map
1 | auto it = s2.find(2); |
排序
基本排序
默认升序
1 | vector<int> n1{ 2, 233, 211 }; |
自定义排序函数 cmp()
C++ 提供了三种定义方式
- 返回值是 bool 的普通函数
- 仿函数
- lambda 表达式(匿名函数)
以上所有函数的形参都应该是
const T &
类型
1 | vector<int> ns{ 2, 233, 211 }; |
为 set/map 指定排序函数
这时 cmp() 使用方法又与在 sort() 中不同了(麻烦啊)
1 | // 不用加括号了 |
string/char* 相关
C++ 很麻烦的一点是,很多时候 string 和 char* 不能通用
string 与 char* 的转换
string 与 int 的转换
1 | // string to int |
1 | // int to string |
len(str)
1 | // len(str) |
字符串拼接
1 | // string 的比较简单 |
替换
Python 中是这样的
1 | "1 2 3".replace(' ', '__') # '1__2__3' |
C++ 虽然也提供了 replace 方法,但逻辑不一样:它需要你提供被替换字符串的首位置和待替换子串的长度,然后替换,且只替换一次
1 | string s6{ "1 2 3" }; |
特别的,如果是对 char 替换,那么考察重点往往不是替换本身,而是 char 作为数组,内部元素的移动(要求不使用额外空间);而且替换的套路也类似,先统计待替换子串的数量,算出替换后的总长度,利用双指针从后往前替换,还有别忘了手动加上 ‘\0’
一道典型的问题牛客/替换空格
1 | void replaceSpace(char *str, int length) { |