【重温C++ Primer】第一章、初识C++

前言

上次学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;
}
  1. 每个c++程序都必须要有一个main函数,它是程序的入口,系统通过调用main函数来运行整个c++程序;
  2. 每个函数有四个部分:返回类型(空void、int、float、string),函数名(可以为空),形参列表(可以为空),函数体;
  3. c++中每句语句后都要以分号结尾“;” ;
  4. 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;
}
  1. iostream标准库有两个基本类型:输入流istream和输出流ostream;流表示随着时间的推移,字符是按顺序生成或者消耗的;

  2. iostream标准库有4个IO对象:istream类型的对象:cin(标准输入);ostream类型的对象:cout(标准输出)、cerr(标准错误)、clog(标准日志);

  3. cout 还可以重定向(比如输出到文件),通过缓冲区。cerr 不可以重定向(只能输出到显示器),不通过缓冲区。cerr的作用是在一些特殊的紧急情况下还可以输出(比如调用栈用完了,没有出口的递归等)。

  4. std::endl可以刷新缓冲区,缓冲区的目的是减少刷屏的次数,多个字符同时输出到显示器。

  5. 引入头文件的两种方式:<>引入标准头文件,系统的头文件;""引入非标准头文件,自定义的头文件;

  6. std:标准库的命名空间,std::cout和std::endl指cout和endl是定义在名为std的命名空间中的,标准库中的所有名字都是定义在std命名空间的。命名空间可以帮助我们避免命名冲突;其实可以使用using namespace std;以更简单的方式访问标准库中的方法;

  7. 输出运算符<<,接受两个运算对象,左侧的运算对象必须是一个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;
    
  8. 输入运算符>>,同样接受两个运算对象,左侧对象必须是istream对象cin,从std::cin >> v1表示将非空输入字符流存入v1变量中;此时如果输入的是空白字符,则当前赋值完毕;再碰到新的非空字符流存入v2变量中;

     std::cin >> v1 >> v2;
    

    等价于

     std::cin >> v1;
     std::cin >> v2;
    

    所以两种输入方式都是有效的:
    在这里插入图片描述

四、注释类型

两种注释方式:

  1. 单行注释://
  2. 多行注释:/* */,且不可嵌套,所以下面这种方式是错误的:
    /*  /**/  */
    

五、控制流

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。
在这里插入图片描述

  1. windows的文件结束符是 Ctrl+Z 然后按 Enter;
  2. 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++学习路线(最全资源整合)

猜你喜欢

转载自blog.csdn.net/qq_38253797/article/details/128096207