• 【重温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
    • 2
    • 3
    • 4
    1. 每个c++程序都必须要有一个main函数,它是程序的入口,系统通过调用main函数来运行整个c++程序;
    2. 每个函数有四个部分:返回类型(空void、int、float、string),函数名(可以为空),形参列表(可以为空),函数体;
    3. c++中每句语句后都要以分号结尾“;” ;
    4. return 0表示成功,非0的返回值含义由系统决定,通常用来指出错误类型;

    二、编译、运行程序

    源文件通过编译可以生成可执行文件。

    windows + vscode,编译指令:

    g++ 源文件
    
    • 1

    三、初识输入输出

    例子:

    #include 
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    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;
      
      • 1

      等价于

       std::cout << "Hello World";
       std::cout << std::endl;
      
      • 1
      • 2
    8. 输入运算符>>,同样接受两个运算对象,左侧对象必须是istream对象cin,从std::cin >> v1表示将非空输入字符流存入v1变量中;此时如果输入的是空白字符,则当前赋值完毕;再碰到新的非空字符流存入v2变量中;

       std::cin >> v1 >> v2;
      
      • 1

      等价于

       std::cin >> v1;
       std::cin >> v2;
      
      • 1
      • 2

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

    四、注释类型

    两种注释方式:

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

    五、控制流

    5.1、循环语句:while + for

    【while循环】
    只要condition为真就一直执行statement语句,直到condition为假,则继续执行while语句外的第一条语句。

    while (condition)
    	statement
    
    • 1
    • 2

    【for循环】
    for语句 = 循环头 + 循环体
    循环头 = 初始化语句 + 循环条件 + 表达式

    例子:

    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    5.2、读取数量不定的输入数据

    例子:实现对用户输入的一组数求和

    #include 
    
    int main()
    {
        int sum = 0, val = 0;
        while (std::cin >> val) {
            sum += val;
        }
        std::cout << sum << std::endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例子:

    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    六、类

    类是 c++ 最重要的特性之一。
    类定义了行为。类的作者决定了类类型对象上可以使用的所有操作.

    成员函数是定义为类的一部分的函数,也被称为方法。
    通常以类对象的名义来调用成员函数:Item.isbn()。即使用点运算符(.)

    这一块把书中几个经典例题和课后习题敲一敲,就明白了。

    Reference

    知乎: 《C++Primer》全书学习笔记(详细)

    Github: applenob/Cpp_Primer_Practice

    CSDN: 【笔记】C++ Prime

    CSDN: C++学习路线(最全资源整合)

  • 相关阅读:
    【重学C++】01| C++ 如何进行内存资源管理?
    【每日一题】对角线遍历
    day49数据库 索引 事务
    Qt中一个信号连接多个槽函数后的执行顺序
    分布式系统(Distributed Systems)概述
    动态规划-矩阵连乘
    KY12 玛雅人的密码
    基于linux的操作系统的通用启动流程(一)
    大学生《Web课程谁》期末网页制作 HTML+CSS+JavaScript 网页设计实例 瑜伽网站企业网站制作
    Word控件Spire.Doc 【文本】教程(10) ;在 word 文档中的字符或句子周围应用边框
  • 原文地址:https://blog.csdn.net/qq_38253797/article/details/128096207