1.char(数字)转int
char ch = '5';
int nNum = ch - '0'; //nNum = 5
2.int转char(数字)
int nNum = 6;
char ch = nNum + '0'; //ch = '6';
3.字符串转数字
①int n = atoi("99"); //atoi的参数为const char*, 如果是string类型需要转化:s.c_str()
②int m = stoi("88"); //string类型不用转化,直接使用
4.进制转换
string str("a");
cout << stoi(str, 0, 16) << endl; //输出10 //16进制(字符串)转10进制
string str2("11");
cout << stoi(str2, 0, 2) << endl; //输出3 //2进制(字符串)转10进制
5.map
①判断是否找到key值
if (mapIn.find(key) != mapIn.end()) //如果找到
②修改value值
mapIn[key] = 10; //假设value为int类型,那么这时value更改为10了
6.string中find不到时为string::npos
if (str.find('0') == string::npos) //如果找不到
7.反转:reverse(支持随机访问的容器可用)
reverse(iterator begin, iterator end);
8.set与map
①都自动排序(默认升序)
②不允许有重复元素,插入重复不会报错,但只输出一个
③insert一个元素时,想到set,insert两个元素时想到map
9.list不能用[ ]或at取值(set,map也是)
for (auto it = list.begin(); it != list.end(); ++it)
cout << *it << endl;
10.sort不仅仅可以排序数字,string类型也可以
11.判断字符串中字符的类型
头文件:#include<ctype>
bool isdigit(char ch) //判断字符串中的字符是否为数字
bool isalpha(char ch) //判断字符串中的字符是否为字母(A~Z,a~z)
bool isalnum(char ch) //判断字符串中的字符是否为数字或字母
bool isupper(char ch); //判断字符串中的字符是否为字母(A~Z)
bool islower(char ch); //判断字符串中的字符是否为字母(a~z)
12.if (~n)
int n = -1;
if (~n) //为假,因为~n = -(n + 1), ~n = 0
13.初始化vector嵌套vector
vector<vector<int>> vec(2, vector<int>(3, 1));
//2为2行的意思,3为3列的意思,1为初始化的值,没写的话默认为0
相当于:
1 1 1
1 1 1
14.获取vector嵌套vector的行与列
int row = vec.size(); //行
int col = vec[0].size(); //列
15.初始化vector<vector<int>>每一列的个数
vector<vector<int>> v(5); //5行
for (int i = 0; i < 5; ++i)
{
v[i].resize(i + 1);
for (...)
{
...
}
}
得到:
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
如果是vector<vector<int>> vec(5, vector<int>(5));
得到的则是5×5的矩阵
16.unordered_map赋值
unordered_map<int, int>umap;
for (int i = 0; i < arr.size(); ++i)
{
umap[arr[i]]++; //arr[i]相当于key值(first), umap[arr[i]]相当于value值(second)
//跟数组类似
}
17.初始化unordered_map
unordered_map<char, int> umap =
{
{'I', 1},
{'V', 5}
} //里面为大括号
18.string自带栈函数
string str;
str.push_back(char ch); //末尾添加一个字符
str.pop_back(); //末尾删除一个字符
s.back(); //得到最后一个字符
19.n >> 1 等同于除以2
例如:9 >> 1 = 4
9的二进制为1001,右移则是删除最右边的,最左边加上0,得到0100
20.数组作为函数参数时,不用解引用也可以更新数组
int Test(int arr[]); 与 int Test(int *arr);是一样的
int n[10] = {0};
Test(n); //不用加&,加了反而错,因为本身就是地址传递
21.auto的使用
string str;
for (auto i : str)
{
s[i] = 'A'; //错误,auto得到的i为char类型,即是str里面的字符了
i = 'B'; //正确,如果想访问下标,得for(size_t i = 0; i < str.size(); ++i)
}
22.大小写转换
①字符转换:
char ch = tolower(‘A’); //转小写
char ch = toupper('a'); //转大写
②字符串转换:
头文件:#include<algorithm>
string str("AAbb");
transform(str.begin(),str.end(),str.begin(),::tolower); //转小写
transform(str.begin(),str.end(),str.begin(),::toupper); //转大写
23.获取set的第一个元素
set<int>myset{3, 4,5};
int n = *myset.begin();
拓展:vector的v.front() = *v.begin();
24.输入字符串
读入字符串:(遇空格,回车都会结束)
string s;
cin >> s;
连续读入字符串:(遇回车才结束)
vector<string> v;
while(1)
{
string s;
cin >> str;
v.emplace_back(str);
if (getchar() == '\n')
{
break;
}
}
读入一行字符串:(遇空格不结束,遇回车结束)
string s;
getline(cin, s);
25.刷题
26.链表