cpp_学习笔记

大学时学习的第一门编程语言就是C,实际开发时C++的使用还是较多的,基本上前三年均以Cpp为主。
无奈读研和工作后就从未再接触过C和CPP了,目前公司产品需要,再回头拾起Cpp的知识吧,复习为主,只摘录重点。

参考教程
C++教程:https://www.runoob.com/cplusplus/cpp-environment-setup.html
C++ 教程:https://www.runoob.com/cplusplus/cpp-tutorial.html
STL完整版整理:https://zsweety.blog.csdn.net/article/details/70568499

C++ 环境设置

1
2
3
4
5
6
7
8
g++ -v  

cin.clear(); // 清空缓存
cin.sync(); // 清空缓存
cin.get(); // 接收键盘输入

调试时界面一闪而过解决办法:
system("pause"); //注意:“system("pause")”;语句会显示“请按任意键继续……”

C++ 注释

https://www.runoob.com/cplusplus/cpp-comments.html
可以使用 #if 0 … #endif 来实现注释,且可以实现嵌套,格式为:

1
2
3
#if 0  
code
#endif

你可以把 #if 0 改成 #if 1 来执行 code 的代码。
这种形式对程序调试也可以帮助,测试时使用 #if 1 来执行测试代码,发布后使用 #if 0 来屏蔽测试代码。
#if 后可以是任意的条件语句。

C++ 数据类型

https://www.runoob.com/cplusplus/cpp-data-types.html
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

一些基本类型可以使用一个或多个类型修饰符进行修饰:
signed
unsigned
short
long

typedef 声明
枚举类型

C++ 变量作用域

https://www.runoob.com/cplusplus/cpp-variable-scope.html
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
数据类型 初始化默认值
int 0
char ‘\0’
float 0
double 0
pointer NULL
正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。

C++ 常量

https://www.runoob.com/cplusplus/cpp-constants-literals.html
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。
布尔常量
字符常量
定义常量

在 C++ 中,有两种简单的定义常量的方式:
使用 #define 预处理器。
使用 const 关键字。

C++ 修饰符类型

https://www.runoob.com/cplusplus/cpp-modifier-types.html
修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。

修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如:unsigned long int。

1
2
3
4
5
6
7
8
9
   short int i;           // 有符号短整数  
short unsigned int j; // 无符号短整数

j = 50000;

i = j;
cout << i << " " << j;

-15536 50000

C++ 中的类型限定符
const
volatile
restrict

C++ 存储类

https://www.runoob.com/cplusplus/cpp-storage-classes.html
auto 存储类
register 存储类
static 存储类
extern 存储类
mutable 存储类
thread_local 存储类

C++ 运算符

https://www.runoob.com/cplusplus/cpp-operators.html
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
杂项运算符
C++ 中的运算符优先级

C++ 循环

https://www.runoob.com/cplusplus/cpp-loops.html
循环类型
while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
for 循环 多次执行一个语句序列,简化管理循环变量的代码。
do…while 循环 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。

循环控制语句
break 语句 终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
continue 语句 引起循环跳过主体的剩余部分,立即重新开始测试条件。
goto 语句 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。

C++ 判断

https://www.runoob.com/cplusplus/cpp-decision.html
if 语句 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
if…else 语句 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
switch 语句 一个 switch 语句允许测试一个变量等于多个值时的情况。

? : 运算符

C++ 函数

https://www.runoob.com/cplusplus/cpp-functions.html
函数声明
int max(int num1, int num2);

函数参数
传值调用 该方法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
指针调用 该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
引用调用 该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

参数的默认值
当您定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。
Lambda 函数与表达式

C++ 数字

https://www.runoob.com/cplusplus/cpp-numbers.html

1
2
3
4
// 设置种子
srand( (unsigned)time( NULL ) );
// 生成实际的随机数
j= rand();

C++ 数组

https://www.runoob.com/cplusplus/cpp-arrays.html
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
double salary = balance[9];

C++ 字符串

https://www.runoob.com/cplusplus/cpp-strings.html

C++ 引用

https://www.runoob.com/cplusplus/cpp-references.html

C++ 引用 vs 指针

引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。

C++ 基本的输入输出

https://www.runoob.com/cplusplus/cpp-basic-input-output.html
无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

C++ 数据结构

https://www.runoob.com/cplusplus/cpp-data-structures.html
指向结构的指针
为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:
struct_pointer->title;

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×