目录
- 前言
- 一、编写一个简单的c++程序
- 二、编译、运行程序
- 三、初识输入输出
- 四、注释类型
- 五、控制流
- 5.1、循环语句:while + for
- 5.2、读取数量不定的输入数据
- 5.2、if 语句
- 六、类
- Reference
前言
上次学C++还是在大一的时候,一直都想好好的温习一下C++。刚好最后被隔离在宿舍了,出不去,正好有时间有耐心好好重温下C++。
其实很久之前就想重温一下C++了,因为秋招拿到的视觉算法的offer,而且后面的工作可能会偏向应用,所以重温c++还是很有必要的,很多算法部署都需要C++。之后自己也想学习一下点云和SLAM相关的知识,所以学好C++是必须的~
没打算看视频学习,因为很多基础的东西还是有的,所以这次希望可以通过书籍系统性的学习一下。在书籍选择上,有《C++ Primer》和《C++ Primer Plus》两本书,后者比较基础,适合没有编程经验的初学者,前者适合有一定C++编程经验的。所以,这里我选择《C++ Primer》。
800多页的书籍,可能需要很长的时间才能看完,我不求快,但求细致。我会记录下每一点代码细节和书籍中的编程案例和练习题。
我敲的C++ Primer练习题代码:
Github: https://github.com/HuKai97/Cpp-Primer
一、编写一个简单的c++程序
int main()
{
return 0;
}
- 每个c++程序都必须要有一个main函数,它是程序的入口,系统通过调用main函数来运行整个c++程序;
- 每个函数有四个部分:返回类型(空void、int、float、string),函数名(可以为空),形参列表(可以为空),函数体;
- c++中每句语句后都要以分号结尾“;” ;
- return 0表示成功,非0的返回值含义由系统决定,通常用来指出错误类型;
二、编译、运行程序
源文件通过编译可以生成可执行文件。
windows + vscode,编译指令:
g++ 源文件
三、初识输入输出
例子:
#include <iostream>
int main()
{
std::cout << "Enter two number: " << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;
return 0;
}
-
iostream标准库有两个基本类型:输入流istream和输出流ostream;流表示随着时间的推移,字符是按顺序生成或者消耗的;
-
iostream标准库有4个IO对象:istream类型的对象:cin(标准输入);ostream类型的对象:cout(标准输出)、cerr(标准错误)、clog(标准日志);
-
cout 还可以重定向(比如输出到文件),通过缓冲区。cerr 不可以重定向(只能输出到显示器),不通过缓冲区。cerr的作用是在一些特殊的紧急情况下还可以输出(比如调用栈用完了,没有出口的递归等)。
-
std::endl可以刷新缓冲区,缓冲区的目的是减少刷屏的次数,多个字符同时输出到显示器。
-
引入头文件的两种方式:<>引入标准头文件,系统的头文件;""引入非标准头文件,自定义的头文件;
-
std:标准库的命名空间,std::cout和std::endl指cout和endl是定义在名为std的命名空间中的,标准库中的所有名字都是定义在std命名空间的。命名空间可以帮助我们避免命名冲突;其实可以使用using namespace std;以更简单的方式访问标准库中的方法;
-
输出运算符<<,接受两个运算对象,左侧的运算对象必须是一个ostream对象,即cout,右侧是需要打印的值;std::cout << "Hello World"表示把字符流"Hello World"写给ostream对象std::cout,后半句表示操作符std::endl输入到ostream对象std::cout,系统识别特殊操作符std::endl就知道这句输出程序结束了,于是结束在内存中等待写入流,将目前程序所产生的所有输出都真正的写入输出流中;
std::cout << "Hello World" << std::endl;
等价于
std::cout << "Hello World"; std::cout << std::endl;
-
输入运算符>>,同样接受两个运算对象,左侧对象必须是istream对象cin,从std::cin >> v1表示将非空输入字符流存入v1变量中;此时如果输入的是空白字符,则当前赋值完毕;再碰到新的非空字符流存入v2变量中;
std::cin >> v1 >> v2;
等价于
std::cin >> v1; std::cin >> v2;
所以两种输入方式都是有效的:
四、注释类型
两种注释方式:
- 单行注释://
- 多行注释:/* */,且不可嵌套,所以下面这种方式是错误的:
/* /**/ */
五、控制流
5.1、循环语句:while + for
【while循环】
只要condition为真就一直执行statement语句,直到condition为假,则继续执行while语句外的第一条语句。
while (condition)
statement
【for循环】
for语句 = 循环头 + 循环体
循环头 = 初始化语句 + 循环条件 + 表达式
例子:
#include <iostream>
int main()
{
int val = 1, sum1 = 0;
while (val <= 10){
sum1 += val;
val += 1;
}
std::cout << "while: " << sum1 << std::endl;
int sum2 = 0;
for (int val = 1; val <= 10; val ++){
sum2 += val;
}
std::cout << "For: " << sum2 << std::endl;
return 0;
}
5.2、读取数量不定的输入数据
例子:实现对用户输入的一组数求和
#include <iostream>
int main()
{
int sum = 0, val = 0;
while (std::cin >> val) {
sum += val;
}
std::cout << sum << std::endl;
return 0;
}
std::cin >> val会从标准输入中读取一个数,保存在val中。这里放在while中其实是在检测流的状态,如果流是有效的,正确的字符,则为True,当遇到无效输入字符或文件结束符时(Ctrl+Z + Enter),返回False。
- windows的文件结束符是 Ctrl+Z 然后按 Enter;
- Unix、ubuntu、mac:Ctrl + d
5.2、if 语句
condition = True执行statement1,condition = False执行statement2;
if (condition){
statement1
}else{
statement2
}
例子:
#include <iostream>
int main()
{
int curVal = 0, val = 0;
if (std::cin >> curVal){
int count = 1;
while (std::cin >> val){
if (curVal == val){
count += 1;
}else{
std::cout << curVal << " occurs " << count << " times." << std::endl;
curVal = val;
count = 1;
}
}
std::cout << curVal << " occurs " << count << " times." << std::endl;
}
return 0;
}
六、类
类是 c++ 最重要的特性之一。
类定义了行为。类的作者决定了类类型对象上可以使用的所有操作.
成员函数是定义为类的一部分的函数,也被称为方法。
通常以类对象的名义来调用成员函数:Item.isbn()。即使用点运算符(.)
这一块把书中几个经典例题和课后习题敲一敲,就明白了。
Reference
知乎: 《C++Primer》全书学习笔记(详细)
Github: applenob/Cpp_Primer_Practice
CSDN: 【笔记】C++ Prime
CSDN: C++学习路线(最全资源整合)