type
status
date
slug
summary
tags
category
icon
password
C++ code
1. 常用
交换x和y | swap(x,y) | algorithm |
数组翻转(起始位,终止位) | reverse(a,a+k) | algorithm |
输入0停止 | int n;
while (cin >> n, n) | ㅤ |
将字符串转换为整数 | stoi(str)
atoi(str)(传入的是字符数组) | ㅤ |
3.1.1. C++的子函数无法传出数组:
2. 输入输出
关键字 | 范围 | 大小 | ㅤ |
bool | ㅤ | 1 | ㅤ |
char | ㅤ | 1 | %c读空格 |
int | ~ ;-2147483648~2147483647 | 4 byte | %d不读空格 |
float,1.235e2,单精度浮点数 | 6-7位有效数字 | 4 | %f |
double | 15~16位有效数字 | 8 | %lf |
long long | ~ | 8 | %lld |
long double | 18~19位有效数字 | 16/12/8 | ㅤ |
注意单引号双引号意义不同,单引号表示字符,双引号表示字符串
16G内存比16G硬盘大
float e=1也没问题,整数是特殊的浮点数
long long l = 1000000000000LL;
存储:B:Byte b:bit
1 Byte = 8 bit
1.数据类型:%f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)。2.精度:%f标记默认输出六位小数,%lf标记默认输出十位小数。
能用cin和cout的一定能用scanf和printf,反之不然;前者快一些;
float转为int,是向下取整
混合类型会向高转换
%.lf会限制位数,用.的时候要搭配数字一起用
浮点数的比较运算
用浮点数进行比较时候可能会有误差,因为在C++中,浮点数的有效位数是不同的。
所以在比较的时候需要给一个容忍误差:
比如,A-B的绝对值误差<1e-6
const double定义的是常量,如果在过程中改变会报错。
以下是printf的用法:
.5f和5d不一样,-5d是在右边补齐;
5.1就是共5位,小数点给1位
cin接受输入的时候可以连续接受
3. if判断
python 是 elif
C++是 else if
这里需要用“%%”转译为%
判断条件不要太死板,比如取首字母等
4. 循环
- 斐波那契数列
练习:求斐波那契数列的第n项。f(1)=1,f(2)=2,f(3)=2,f(n)=f(n-1)+f(n-2).
一般递归没有循环快;
while和do while的循环:while是先判断再执行,而do while是先上车再买票;
初始;判断;执行;
continue和break的区别:
break是直接跳出循环,continue是不执行下面循环的语句,执行完继续i++;
- 画菱形
曼哈顿距离:
- 例题
- while(x,y)以后面的数为准
统计输入个数:
canf的输入结束为-1;
5. 数组
main函数内的是栈空间,比较少;
main函数外的是堆空间,占的是内容,空间比较大,且自动初始化为全部都是0;
堆中的空间在初始化的时候还不会真的开辟,先申请,要用的时候再一个个开。
数组翻转
数组旋转:后面放到第一个
如果想要以高精度存储较大的数字,会将数存在数组里。个位存a[0],方便后续加减法进位;
6. 字符串
每个常用字符都对应一个-128~127的数字,二者之间可以相互转化;
中文字符不可以,是变长字符,由两到三个对应。
48~57分别对应0~9
65~90分别对应A~Z
97~ 分别对应a~z(和大写差值32)
其实字符串就是字符数组加上结束符'\0'。
可以使用字符串初始化字符数组,但是要注意每个字符串结尾为暗含一个'\0'字符,因此字符数组的长度至少要比字符串的长度多1!
量大用字符串,平时可用string
string只能用cin
注意,上述函数每执行一次都需要遍历一遍,所以如果再包一个for,计算复杂度会比较高。
6.1. 标准库类型string
可变长的字符序列,比字符数组更加好用,需要引入头文件 # include <string>
7. 3.7. 函数
静态变量:相当于在函数内部开了一个只有该函数可以使用的全局变量,且是在堆中开,空间较大;
参数传递:
- 传值传递:形参不可影响形参,仅copy
- 引用传递(加&):形参可以影响形参
注意数组的函数都是引用传递,里面改变外面也会相应改变;
外面的是指针数组,函数里是数组指针,所以里面本质是指针,长度相对于外面变短了。
内联函数,在函数前面加入inline,这时相当于函数内部的语句完全copy到外面。
好处:让代码的运行速度变快。适用短小的函数,节省调用的时间。
递归函数不支持内联函数。
递归:函数自己调用自己。注意一定要写好边界!
所有循环都可以用递归代替,反之不然。
8. 类
本身计算器是不需要类的,但是有助于帮人写代码;将功能相近的函数定义在一起。
结构体的构造函数需要与结构体的名称一致。
9. 指针
全局变量在堆里面,所以默认初始化为0;局部变量在栈里面,所以默认是随机值,没有经历过初始化。
每个变量都分为:原值、地址;
栈空间是从上往下堆的,堆空间是从下往上放的。
10. 链表
短路的概念:if(a>5 && b<6)如果前面的不满足,则不会判断后面了
11. STL
容器:主要存数据的东西;
vector可变数组,用多少开多少;
clear表示将当前数组清空