C++
变量
命名规则
- 由字母(a-z & A-Z)数字(0-9)和下划线(_)构成
- 不能由数字开头
- 不能使用C++中的关键词和保留字 main using
含义
- 存储数据
- 存储最新的数据
- 只能存储一个数据
赋值方法
1 | int a; //先声明 |
数据类型
整数型
int
: 4 byte(数据范围:-2,147,483,648 到 2,147,483,647)
long long int
: 8 byte(数据范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807)
short int
浮点数
单精度浮点数:float
(数据有效位为7位)
双精度浮点数:double
(数据有效位为14-15位)
long double
字符型
char
ASCII码
1
cout << 'A' + 12;
A的ASCII码是65,所以结果为77(65+12)
Unicode(了解)
中:
\u4e2d
布尔型
bool
:true
或 false
数据类型的转换
自动类型转换
1 | int a = 12; |
在做自动类型转换时,编译器会自动的将数据转换为较大内存的空间去存储
int
被转换为long long int
1 | cout<< (int) 1.4272 << endl; |
强制类型转换
格式:(类型) (表达式)
结果为 1
和 4
运算符
算术运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | https://www.runoob.com/cplusplus/cpp-increment-decrement-operators.html,整数值增加 1 | A++ 将得到 11 |
– | https://www.runoob.com/cplusplus/cpp-increment-decrement-operators.html,整数值减少 1 | A– 将得到 9 |
1 | cout << 13 / 4.0; |
结果为3.25
比较(关系)运算符
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
1 | cout << (112==12); |
结果为0
,是false
1
为true
逻辑运算符
运算符 | 描述 | 实例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都 true,则条件为 true。 | (A && B) 为 false。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。 | !(A && B) 为 true。 |
位运算符
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与操作,按二进制位进行”与”运算。运算规则: |
0&0=0;
0&1=0;
1&0=0;
1&1=1; | (A & B) 将得到 12,即为 0000 1100 |
| | | 按位或运算符,按二进制位进行”或”运算。运算规则:
0|0=0;
0|1=1;
1|0=1;
1|1=1; | (A | B) 将得到 61,即为 0011 1101 |
| ^ | 异或运算符,按二进制位进行”异或”运算。运算规则:
0^0=0;
0^1=1;
1^0=1;
1^1=0; | (A ^ B) 将得到 49,即为 0011 0001 |
| ~ | 取反运算符,按二进制位进行”取反”运算。运算规则:
1=-2;A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。 |
~0=-1; | (
| << | 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 | A << 2 将得到 240,即为 1111 0000 |
| >> | 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 | A >> 2 将得到 15,即为 0000 1111 |
赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操9作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
= | 按位或且赋值运算符 |
头文件
1 |
<cmath>
数学函数
<iomanip>
iomanip setprecision() function in C++ with Examples - GeeksforGeeks
控制浮点数显示的有效数字个数:setprecision()
bits/stdc++.h
<bits/stdc++.h> in C++ - GeeksforGeeks
万能头文件(包括很多头文件)
cstring
memcmp
比较两个储存区string
1 | char s1[10] = "1234"; |
结果为1
,一位s1
大于s2
,参考下面:
前面 > 后面:1
前面 < 后面:-1
前面 = 后面:0
strcpy
复制string
1 | char s1[10] = "100"; |
结果为100
,因为s2
复制了s1
的值(100
)。以下是错误示范:
1 | s2 = s1; // 错误示范 |
不能直接等于,会报错,要用strcpy
strlen
获取字符数组的长度(储存字符数组的个数)
1 | char s1[10] = "100"; |
结果为3
vector
中文为向量,是一个封装了动态大小数组的顺序容器
1 | vector<typename> name |
push_back()
往vector
容器中添加元素
pop_back()
从 vector
容器中删除元素
clear()
清除 vector
中的所有元素
insert()
插入一个元素 x
:insert(it, x)
Switch 语句
1 | switch(表达式) { |
- 表达式的值的类型必须是整形,字符型,枚举型。
- 常量表达式的值的类型要和switch后面的表达式的值的类型保持一致。
break
可有可无,当程序执行到break
,直接跳出switch-case
结构。default
可有可无,当上面所有的case都不执行时,才会执行default
。
循环
- 循环变量初始化 init
- 循环条件 condition
- 循环体 statement(s)
- 迭代语句 increment
for
循环
1 | 循环变量初始化; |
执行逻辑
1 | int i; |
1 | int i = 10; |
while
循环
1 | while (循环条件) { |
执行逻辑
1 | int i = 0; // 循环变量初始化 |
do...while
循环
1 | do { |
执行逻辑
1 | int i = 0; // 循环变量初始化 |
数组
一维数组
声明数组
1 | int 数据名arrayName[数据大小arraySize]; |
1 | int age[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
提取数据
1 | 数据名[index]; |
1 | cout << age[2]; |
结果为3
,因为数据的index
是从0
开始的,所以2
的结果是3
。
修改数据
1 | 数据名[index] = 数值; |
1 | age[3] = 100; |
输出结果为100
,因为数据被改了
二维数组
声明数组
1 | int 数据名[数据大小1][数组大小2]; |
1 | int num[2][3] = {{1, 2, 3}, {11, 22, 33}}; |
1 | int abc[10][2] = {0}; // 可以将所有数据初始化为0 |
提取/修改数据
提取和修改数据的方法和一维数据一样,只不过是多加了一个index
。例如:
1 | cout << abc[3][4]; |
1 | abc[3][4] = 100; |
字符数组
声明数组
1 | char 数据名[数据大小] |
1 | char s1[10] = {'h', 'e', 'l', 'l', 'o', '\0'}; |
s1
和s2
是一样的,但s2
会方便很多
s1
中的\0
是结束符,需要放在最后代表字符数组结束了,参考:
s2
里的结束符默认就有,我们看不到,所以不需要
二维字符数组
1 | char s3[10][10] = {{'1', '2'}, {'A', 'B'}}; |
s3
和s4
是一样,但s4
会方便很多
string
引用数据类型
string
适用于基本数据类型(int
, float
, char
…)
1 | string s5[10] = {"23", "abcdefg", "341hhfr"}; |
递归
函数内部在执行过程中条用他自己这个函数
递推
递推公式:只要找到递推公式,问题几乎就解决了