1.string
1.1 string和int互转
int转string用to_string(int)
s+=to_string(root->val);
string转int用atoi(string.c_str())
res += atoi(s.c_str());
1.2 string输入
#include<iostream>
string str;
getline(cin, str);//读入整行
注:可以用cin>>str; 但是需要注意的一点是这种情况下遇到空白字符会停止!
参考:
C++中string类型的初始化与赋值 - Fisher的博客 - CSDN博客
https://blog.csdn.net/qq_34266990/article/details/78630317
2. 头文件limits.h
include<limits>
CHAR_BIT, CHAR_MAX, CHAR_MIN, SCHAR_MAX, SCHAR_MIN, 0,UCHAR_MAX,SHRT_MAX, SHRT_MIN, USHRT_MAX, INT_MAX, INT_MIN, UINT_MAX, LONG_MAX, ULONG_MAX, LLONG_MAX, LLONG_MIN, ULLONG_MAX
4.数组定义
维数是常量
- 一维数组
int a[3]={1,2,3};
- 二维数组
int a[2][2]={{1,2},{3,4}};
维数是变量、
参考 https://www.cnblogs.com/yuanxiaohui-blog/p/4837037.html
- 一维数组
用new来申请num个int类型的空间,然后返回那段空间的首地址,再赋给array。可见array是一个int类型的指针,指向那段空间的首地址。
int* array=new int[num];
delete[] array;
- 二维数组
把二维数组理解成为很多一维数组的集合
int num = 3;
int** array = new int*[num];//申请int*类型数组的内存空间,赋值给(int*)*类型的array
for(int i=0; i<num; ++i) {
array[i] = new int[num];//一维数组的动态申请,分别给int*类型的数组申请空间,
}
for(int i=0; i<num; i++) {
delete[] array[i];
}
delete[] array;
最简单:还是用vector,也不用delete释放内存
vector<int> f(n+1);//定义长度为n+1的vector
vector<int> v(n,1);//数组长度为n,初始化每个元素均为1
vector<vector<int> > array(row,vector<int>(column));
6.int *赋值
在剑指offer遇到的题目,返回2个参数,1个
是bool类型,在输出return中体现;另外1个是int *类型,在输入中的 duplication体现,要求将重复数number[i]存进这个数组:
duplication[0]=number[i]
7.空指针nullptr
空指针标识(nullptr)(其本质是一个内置的常量)是一个表示空指针的标识,它不是一个整数。这里应该与我们常用的NULL宏相区别,虽然它们都是用来表示空置针,但NULL只是一个定义为常整数0的宏,而nullptr是C++11的一个关键字,一个内建的标识符。
nullptr和任何指针类型以及类成员指针类型的空值之间可以发生隐式类型转换,同样也可以隐式转换为bool型(取值为false)。但是不存在到整形的隐式类型转换。
有了nullptr,可以解决原来C++中NULL的二义性问题;
举例:剑指offer链表中倒数第k个节点
while (pListHead != nullptr){//这里如果用!pListHead 则报错
len++;
stk.push(pListHead);
pListHead = pListHead->next;
}
注意:链表节点如果是nullptr是没有next指针的,必须new一个ListNode才有next指针!!举例:reverse-linked-list-ii_牛客网
9. C/C++ &与&& |与|| 的区别
&&是逻辑与,||是逻辑或,&是按位与,|是按位或
参考:https://www.cnblogs.com/kuihuayou/p/7365075.html
10. 无符号类型
类型 | 标识符 | 字节数 | 数值范围 |
---|---|---|---|
无符号整型 | unsigned[int] | 4 | 0~4294967295 |
无符号短整型 | unsigned short[int] | 2 | 0~65535 |
无符号长整型 | unsigned long[int] | 4 | 0~4294967295 |
无符号字符型 | unsigned char | 1 | 0~255 |
unsigned int a = 0;
cout << a - 1 << endl;//输出结果:4294967295
11. map
11.1 map遍历
map<int,int> mp;
int key,val;
while(cin>>key>>val){
mp[key]+=val;
}
for(auto m:mp)
cout<<m.first<<" "<<m.second<<endl;
11.2 某个key是否存在
1、count函数
count函数用于统计key值在map中出现的次数,map的key不允许重复,存在返回1,不存在返回0
mp.count(key) == 0
2、find函数
如果key存在,则find返回key对应的迭代器,如果key不存在,则find返回尾后迭代器 .end()
mp.find(key) == mp.end()
12. 输入输出
12.1 保留几位小数
使用C流,printf()函数可以很好的保留小数位,
printf("%.1f", a);//不设定宽度,保留1位小数
printf("%10.4f", a); //总宽度为10小数位位4
12.2 读取包含空格的字符串
#include<iostream>
string str;
getline(cin, str);//读入整行
13 判断一个数是否为整数
对于输入的double a;使用floor(a+0.5) == a来判断即可。