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

news2024/11/27 7:39:27

目录

  • 前言
  • 一、编写一个简单的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;
}
  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++学习路线(最全资源整合)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CS5263数据手册|CS5263替代PS176|DP转HDMI2.0芯片设计资料

CS5263替代PS176用于DP转HDMI2.0转换器芯片&#xff0c;DP转HDMI 4K60HZ转换方案芯片&#xff0c;CS5263芯片管脚分布及定义&#xff1a; CS5263芯片DEMO功能演示板如下&#xff1a; CS5263替代PS176支持HDCP 1.4和HDCP2.3&#xff0c;带有支持HDCP中继器的片上键。用于Typec扩…

电脑怎么提取图片中的文字?

图片记录着我们生活的点点滴滴&#xff0c;比如各种办公截图、查快递单号、布置的课堂作业等等&#xff0c;都离不开这种便捷的方法。而我们有时难免需要从图片中提取想要的文字&#xff0c;总不能就靠打字打到手软吧&#xff0c;那么电脑怎么提取图片中的文字呢?有需要的朋友…

基于改进粒子群算法的微电网多目标优化调度(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

如何应对Redis并发访问带来的问题

前言 我们在使用Redis的过程中&#xff0c;难免会遇到并发访问及数据更新的问题。但很多场景对数据的并发修改是很敏感的&#xff0c;比如库存数据如果没有做好并发读取和更新的版本控制&#xff0c;就会导致严重的业务问题。今天就来说说应该如何做好并发访问及数据更新问题。…

使用c++实现通讯录管理系统

使用c实现通讯录管理系统 系统中主要实现的功能如下&#xff1a; 1、添加联系人2、显示联系人3、删除联系人4、查找5、修改6、清空7、退出通讯录 添加联系人&#xff08;姓名、性别、年龄、联系电话、家庭住址&#xff09;以下步骤; 1、设计联系人结构体2、设计通讯录结构体…

智能穿戴显示屏怎样操作?智能穿戴显示屏具有怎么功能?

随着科技时代的来临&#xff0c;相信每一个人都有一台智能化设备。智能设备不仅在我们日常生活中随处可见&#xff0c;而且智能设备的发展已经渗透到了我们所能看到的每一个角落。智能穿戴技术作为中心是虚拟现实的技术&#xff0c;它不仅实现了便携收发通讯的功能&#xff0c;…

微服务框架 SpringCloud微服务架构 6 Nacos 配置管理 6.3 配置热更新

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构6 Nacos 配置管理6.3 配置热更新6.3.1 配置自动刷新6.3.2 总结6 Nacos 配置…

Linux进阶-进程间通信(ipc)

进程间通信&#xff1a;数据传输、资源共享、事件通知、进程控制。 Linux系统下的ipc 早期unix系统 ipc&#xff1a;管道&#xff08;数据传输&#xff09;、信号&#xff08;事件通知&#xff09;、fifo&#xff08;数据传输&#xff09;。 system-v ipc&#xff08;贝尔实…

图的拓扑排序(入门篇)

文章目录拓扑排序满足拓扑排序的前提&#xff1a;图中没有环拓扑排序的实现拓扑排序测试拓扑排序 首先要说明一点&#xff1a;拓扑排序是针对图这种数据结构的特有排序。 百度百科对拓扑排序是这样定义的&#xff1a; 上面的解释不是特别好懂&#xff0c;学过离散数学才知道偏…

探索数字化节能降碳 广域铭岛助力电解铝行业碳达峰

近日&#xff0c;工信部等三部门联合印发《有色金属行业碳达峰实施方案》&#xff08;下称《方案》&#xff09;&#xff0c;要求确保2030年前有色金属行业实现碳达峰。 其中&#xff0c;针对电解铝行业&#xff0c;《方案》提出了优化冶炼产能规模、调整优化产业结构、强化技…

硬件接口和软件接口

文章目录硬件接口IDESCSISATA光纤通道游戏设备RAID卡USBMD设备MP3视频音频软件接口Java里的接口面向对象的接口聊聊软件接口1. 什么是接口2. 诞生3. 早期&#xff08;1950-1970&#xff09;4. 快速发展&#xff08;1970-1990&#xff09;5. 多元化发展&#xff08;1990-2010&am…

双胶合透镜初始设计

双胶合透镜是光学系统中不可或缺的基本光学零件之一。对于一个新设计的光学系统&#xff0c;首先根据性能要求对其进行外形尺寸计算&#xff0c;然后就得开始对各光学零部件进行初级像差设计&#xff0c;求解每个零部件的 、C的分配值&#xff0c;最后根据对各个零部件的 、C要…

小白学编程(JS):随机生成验证码

这道例题来自《JavaScipt从入门到精通》(第三版)中的【例6.6】。 书中给出的代码如下&#xff1a; <body><div id"result"> 产生的验证码&#xff1a;</div><input type"button" name"Submit" class"go-wenbenkuan…

基于PHP+MySQL公积金在线办理系统的设计与实现

公积金在线办理系统具有很强的信息指导性特征,采用PHP开发公积金在线办理系统 给web带来了全新的动态效果,具有更加灵活和方便的交互性。让企业、个人更加方便地在网上开展公积金等工作。 住房公积金是国家机关&#xff0c;企事业单位等及其所在在职职工缴存的长期住房储金。住…

RK3588平台开发系列讲解(CAN篇)CAN FD 开发文档

芯片名称内核版本安卓版本RK3588Linux 5.10Android 12🚀返回专栏总目录 文章目录 一、驱动文件二、DTS 节点配置三、内核配置四、CAN FD 通信测试工具五、CAN FD 常用命令接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍CAN的使用及调试手段。 一、驱…

ADC的数据读取问题

一、从补码说起 计算机是如何表示负数的呢&#xff1f;这要从补码说起。 在数学中&#xff0c;任意基数的负数都在最前面加上"−"符号&#xff08;负号&#xff09;来表示。 然而&#xff0c;在计算机硬件中&#xff0c;数字都以无符号的二进制形式表示&#xff0…

[附源码]Python计算机毕业设计Django蛋糕购物商城

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

复旦-华盛顿大学EMBA 二十年20人丨林劲:对自己多一些“标准”

复旦大学-华盛顿大学EMBA20周年校友系列访谈。      一流企业定标准、二流企业做品牌、三流企业做产品。这是被广为传颂的一句话&#xff0c;意思是说要想成为一流企业&#xff0c;就必须成为行业标准的制定者&#xff0c;或至少能够主导标准的制定。尤其当企业需要在国际市…

2022年NPDP新版教材知识集锦--【第四章节】(3)

【实体化设计阶段】(全部获取文末) 实体化设计阶段是从概念定义开始&#xff0c;根据技术和经济性要求&#xff0c;不断进行设计&#xff0c;直至达到可用于制造的详细设计阶段&#xff0c;从而实现可制造性。 3.1联合分析 联合分析(Conjointanalysis)是一种统计分析方法&am…

python中protobuf和json互相转换应用

在实际信息系统开发中&#xff0c;经常会用到各种各样的协议&#xff0c;网络协议常用的有http&#xff0c;tcp&#xff0c;udp等&#xff0c;传输数据格式协议有json&#xff0c;xml&#xff0c;TLV等。本节将给大家介绍一种节省带宽数据协议&#xff0c;谷歌的ProtoBuf协议&a…