c++笔记
2024-2-23
| 2024-3-21
0  |  Read Time 0 min
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. 输入输出

notion image
 
关键字
范围
大小
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,反之不然;前者快一些;
notion image
notion image
notion image
float转为int,是向下取整
混合类型会向高转换
notion image
%.lf会限制位数,用.的时候要搭配数字一起用
浮点数的比较运算
用浮点数进行比较时候可能会有误差,因为在C++中,浮点数的有效位数是不同的。
所以在比较的时候需要给一个容忍误差:
比如,A-B的绝对值误差<1e-6
const double定义的是常量,如果在过程中改变会报错。
notion image
notion image

以下是printf的用法:
notion image
.5f和5d不一样,-5d是在右边补齐;
notion image
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).
notion image
一般递归没有循环快; while和do while的循环:while是先判断再执行,而do while是先上车再买票;
notion image
初始;判断;执行; continue和break的区别: break是直接跳出循环,continue是不执行下面循环的语句,执行完继续i++;
 
  • 画菱形
曼哈顿距离:
notion image

  • 例题
notion image
notion image
notion image
  • while(x,y)以后面的数为准

统计输入个数:
notion image
canf的输入结束为-1;
notion image

5. 数组

main函数内的是栈空间,比较少; main函数外的是堆空间,占的是内容,空间比较大,且自动初始化为全部都是0;
堆中的空间在初始化的时候还不会真的开辟,先申请,要用的时候再一个个开。
数组翻转 数组旋转:后面放到第一个
 
如果想要以高精度存储较大的数字,会将数存在数组里。个位存a[0],方便后续加减法进位;
 

6. 字符串

每个常用字符都对应一个-128~127的数字,二者之间可以相互转化; 中文字符不可以,是变长字符,由两到三个对应。 48~57分别对应0~9 65~90分别对应A~Z 97~ 分别对应a~z(和大写差值32)
notion image
其实字符串就是字符数组加上结束符'\0'。
可以使用字符串初始化字符数组,但是要注意每个字符串结尾为暗含一个'\0'字符,因此字符数组的长度至少要比字符串的长度多1!
量大用字符串,平时可用string
string只能用cin
注意,上述函数每执行一次都需要遍历一遍,所以如果再包一个for,计算复杂度会比较高。

6.1. 标准库类型string

可变长的字符序列,比字符数组更加好用,需要引入头文件 # include <string>

7. 3.7. 函数

静态变量:相当于在函数内部开了一个只有该函数可以使用的全局变量,且是在堆中开,空间较大;
参数传递:
  1. 传值传递:形参不可影响形参,仅copy
  1. 引用传递(加&):形参可以影响形参
注意数组的函数都是引用传递,里面改变外面也会相应改变; 外面的是指针数组,函数里是数组指针,所以里面本质是指针,长度相对于外面变短了。
内联函数,在函数前面加入inline,这时相当于函数内部的语句完全copy到外面。 好处:让代码的运行速度变快。适用短小的函数,节省调用的时间。 递归函数不支持内联函数。
递归:函数自己调用自己。注意一定要写好边界! 所有循环都可以用递归代替,反之不然。
 

8. 类

本身计算器是不需要类的,但是有助于帮人写代码;将功能相近的函数定义在一起。
结构体的构造函数需要与结构体的名称一致。

9. 指针

notion image
全局变量在堆里面,所以默认初始化为0;局部变量在栈里面,所以默认是随机值,没有经历过初始化。 每个变量都分为:原值、地址; 栈空间是从上往下堆的,堆空间是从下往上放的。
 

10. 链表

短路的概念:if(a>5 && b<6)如果前面的不满足,则不会判断后面了

notion image
notion image
 

11. STL

容器:主要存数据的东西; vector可变数组,用多少开多少; clear表示将当前数组清空
 
 
 
 
 
 
 
notion image
 

12. 位运算与常用库函数

notion image
 
notion image
notion image
 

13. 例题

13.1 用栈实现队列

 

13.2 和为S的两个数字

notion image
 

13.3. 数字排列

notion image
 
 
  • C++
  • 加锁面经计算成像 - CASSI介绍(一)
    Catalog