当前位置: 首页 > news >正文

C++自学精简实践教程

一、介绍

1.1 教程特点

  • 一篇文章从入门到就业
  • 有图有真相,有测试用例,有作业;
  • 提供框架代码,作业只需要代码填空
  • 规范开发习惯,培养设计能力

1.2 参考书

  • 唯一参考书《C++ Primer 第5版》​
  • 参考书下载:
    • 蓝奏云:C++_Primer_5th_Edition_English.pdf​

二、集成开发环境

三、 教程内容

1 基础部分

难度系数(1):*

1.1 变量和基本类型

1.1.1 变量和基本类型(V)

1.1.2 引用类型 reference type(V)

1.1.3 赋值语句 assignment statement(变量与常量const)(V)

1.2 标准输入输出 I/O

1.2.1 输出变量(cout与endl换行显示)

1.2.2 输入变量(cin 及字符串类型string)

1.2.3 名称空间 name space std

1.2.4 getline 读取一行内容

1.2.5 cin 扔给 getline 一个回车,程序炸了

1.2.6 输出格式化 format control

1.3 表达式

1.3.1 算术表达式 expression

1.3.2 整除/ 与 求余% 运算

1.4 关系和逻辑运算符

1.4.1 关系运算符和逻辑运算符 bool

1.5 for循环语句

1.5.1 for循环语句

练习1 说一万次我爱你(让计算机去做舔狗)(A)

练习2 数列前n项和 (计算机暴力计算)(A)

练习3 打印九九乘法表(双重循环) (A)

练习4 计算圆周率π(隐式类型转换)(高端大气上档次)(A)

1.6 if语句

1.6.1 if语句

练习 求一个数的绝对值

1.7 函数

1.7.1 函数function definition定义与调用call

1.7.2 栈变量的作用域

1.7.3 向函数传递参数(传值、传引用、传const引用)

练习1 求两个数的最大值max

练习2 交换两个变量的值 swap (A)

开发小助手:Visual Studio 2022 显示函数参数类型

1.7.4 模板函数 template function

练习3 输出正整数N各个位上的数字 (A)

练习4 求最大公约数 (A)

1.7.5 递归函数 recursive function :输出正整数N各个位上的数字

练习5 数列前n项和(递归函数)

练习6 判断一个数是否为素数(A)

Visual Studio 2022 调试Debug

10分钟学会Visual Studio调试C++程序(CMake版)(完整版,推荐!)

1.8 动态内存

难度系数(4):* * * *

到这里难度开始突然增加。建议你遇到不清楚的,一定要多问我。这是加速学习的唯一捷径!

1.8.1 堆heap栈stack与指针变量pointer(地址变量)

1.8.2 解引用 dereference operator

1.8.3 易混淆的符号&

1.8.4 向函数传递参数(传地址)

1.8.5 堆数组 heap array

练习1 本科生平均学分绩点GPA计算 (自顶向下设计+断点调试) (A)(V)

练习2 冒泡排序 Bubble Sort(提取函数)(自顶向下设计+断点调试) (A)(V)

2 标准库STL基础

难度系数(2):* *

这一部分难度一般,会用就行。你应该不会遇到太多问题。因为和其他语言也没区别。

标准库又叫标准模板库STL(Standard Template Library),是C++语言的一部分。

主要由三部分组成,分别是容器,迭代器,算法。

2.1 数组

2.1.1 数组 vector

练习 for循环求数组元素的最大值 (A)

2.1.2 字符串 string

2.2 迭代器

2.2.1 auto 关键字 (C++11)

2.2.2 迭代器 iterator

2.2.3 范围for循环(遍历数组的三种方式) (C++11)

2.2.4 C++标准库STL容器使用值语义

2.3 容器

2.3.1 链表 list 这个链接是官方示例教程,可以点开每一个子链接看里面的示例代码。示例代码都是最标准最典型的用法。我们应该学会从阅读官方代码中汲取营养,这个习惯应该尽早养成。

2.3.2 关联容器(字典) map

2.3.3 集合 set

2.3.4 标准库所有容器

2.4 lambda 表达式

2.4.1 lambda 表达式

2.5 算法

2.5.1 删除容器的元素 remove erase

2.5.2 快速排序(std::sort)

2.5.3 标准库所有算法

3 面向对象

难度系数(3):* * *

到了这里,类与对象是两个新概念,你可能觉得有点奇怪。但是他们是面向对象编程语言最有威力的设施。几乎没有之一。

3.1类与对象

3.1.1 类 struct/class 与 对象 object(A)

3.1.2 类的成员函数 member function 与类成员的访问控制(public private)

3.1.3 成员函数的声明 declaration 与定义 definition 分开

3.1.4 对象之间赋值 object assignment(对应成员逐个赋值)

3.1.5 struct与class(唯一的区别是访问控制)

练习 基于GPA排名计算本专业保研名单 (自顶向下设计+断点调试) (A)(V)

3.1.6 类的const成员函数

3.1.7 堆对象数组

3.1.8 指针成员操作符 member operator

4 复制控制(深拷贝)

难度系数(5):* * * * *

这里要求你同时掌握堆内存管理和面向对象。难度陡然增加。复制控制是C++的灵魂。C在这里产生了大量Bug,动态内存管理直接让Java产生的垃圾回收机制。

在C++里,你要用完全不同的方式独自处理他们。

遇到问题一定记得第一时间问我。你可以认为我24小时都在等待你的问题。

4.1 构造函数constructor

4.2 构造函数与成员变量初始化

4.2 构造函数成员初始化列表(member initializer lists)(待实现)

4.3 拷贝构造函数(copy constructor ) (浅拷贝)

4.4 非平凡的类与复制控制 (深拷贝 deep control)

4.5 类的静态成员变量 static member

Visual Studio 2022 调试Debug

3分钟掌握C++调试神器-调用堆栈 (V)

4.6 继承 inherit

4.7 多态 polymorphic 与虚函数 virtual function

5 输入输出I/O

难度系数(3):* * *

你之前肯定没有用代码操作过你本机电脑上的文件,这是一个操作性很强的章节。

有可能你创建了一个文件,也写入了内容,但你可能都不知道它在你电脑的哪个文件夹里。是的,你会遇到的。

还是那句话,遇到任何问题不要怀疑自己,直接来找我。

5.1 文本文件读写

5.1.1 输出变量的值到文件 write file

5.1.2 从文件读取变量的值 read file

5.1.3 从文件里一次读取一行 getline

练习1 读取文本文件中的神秘数据 (A)

5.2 字符串流stringstream

5.2.1 从字符串流 stringstream 中读取变量的值

6 操作符重载

6.1 输出操作符重载 operator overloading 与友元函数 friend

6.2 输入操作符重载 input operator overload

练习1 读取文件中的学生信息并显示 (自顶向下设计+断点调试) (A)(V)

6.3 小于操作符重载与对象排序

7 C++小项目

项目1 学生通讯录管理:文本文件增删改查(C++版本)(自顶向下设计+断点调试) (A)(V)

项目2 学生通讯录管理:文本文件增删改查(C 版本)(自顶向下设计+断点调试) (A)(V)

项目3 贪吃蛇(控制台版) (A)

四、其他

1 相关C++学习网站和参考书下载

2 留学生辅导成绩反馈

3 看看985高校的《数据结构》教材能差到什么程度

4 为什么我会感觉中国大学教材很烂?

5 中国的高校计算机教育存在哪些问题?

6 C++ 知名开源库 整理

相关文章:

C++自学精简实践教程

一、介绍 1.1 教程特点 一篇文章从入门到就业有图有真相,有测试用例,有作业;提供框架代码,作业只需要代码填空规范开发习惯,培养设计能力 1.2 参考书 唯一参考书《C Primer 第5版》​参考书下载: 蓝奏云…...

每日一题——LeetCode1572.矩阵对角线元素的和

方法一 遍历矩阵 如果矩阵中某个位置(x,y)处于对角线上,那么这个位置必定满足: xy 或 xy len-1 (len为矩阵长度) var diagonalSum function(mat) {let len mat.length;let sum 0;for (let i 0; i …...

mysql 常用命令练习

管理表格从表中查询数据从多个表查询修改数据sql变量类型 管理表格 创建一个包含三列的新表 CREATE TABLE products (id INT,name VARCHAR(255) NOT NULL,price INT DEFAULT 0,PRIMARY KEY(id) // 自增 ); 从数据库中删除表 DROP TABLE product; 向表中添加新列 ALTER TAB…...

QT6 libModbus 用于ModbusTcp客户端读写服务端

虽然在以前的文章中多次描述过,那么本文使用开源库libModbus,可得到更好的性能,也可移植到各种平台。 性能:读1次和写1次约各用时2ms。 分别创建了读和写各1个连接指针,用于读100个寄存器和写100个寄存器,读写分离。 客户端&am…...

飞桨(PaddlePaddle)Tensor使用教程

文章目录 飞桨(PaddlePaddle)Tensor使用教程1. 安装飞桨2. 创建Tensor3. Tensor的基本属性4. Tensor的操作5. Tensor的广播机制6. Tensor与Numpy数组的转换7. 结论 飞桨(PaddlePaddle)Tensor使用教程 1. 安装飞桨 首先&#xff…...

数据结构c版(3)——排序算法

本章我们来学习一下数据结构的排序算法! 目录 1.排序的概念及其运用 1.1排序的概念 1.2 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想: 2.1.2直接插入排序: 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2…...

《Spring Security 简易速速上手小册》第5章 高级认证技术(2024 最新版)

文章目录 5.1 OAuth2 和 OpenID Connect5.1.1 基础知识详解OAuth2OpenID Connect结合 OAuth2 和 OIDC 5.1.2 重点案例:使用 OAuth2 和 OpenID Connect 实现社交登录案例 Demo 5.1.3 拓展案例 1:访问受保护资源案例 Demo测试访问受保护资源 5.1.4 拓展案例…...

【七】【SQL】自连接

自连接初见 数据库中的自连接是一种特殊类型的SQL查询,它允许表与自身进行连接,以便查询表中与其他行相关联的行。自连接通常用于处理那些存储在同一个表中的但彼此之间具有层级或关系的数据。为了实现自连接,通常需要给表使用别名&#xff…...

C语言while 与 do...while 的区别?

一、问题 while 语句和 do...while 语句类似,都是要判断循环条件是否为真。如果为真,则执⾏循环体,否则退出循环。它们之间有什么区别呢? 二、解答 while 语句和 do..while 语句的区别在于:do..while 语句是先执⾏⼀次…...

RK3568平台开发系列讲解(基础篇)内核错误码

🚀返回专栏总目录 文章目录 一、指针的分类二、错误码三、错误码使用案例沉淀、分享、成长,让自己和他人都能有所收获!😄 一、指针的分类 二、错误码 在 Linux 内核中,所谓的错误指针已经指向了内核空间的最后一页,例如,对于一个 64 位系统来说,内核空间最后地址为 0…...

点云从入门到精通技术详解100篇-基于点云网络和 PSO 优化算法的手势估计(续)

目录 3 深度图像处理及转化 3.1 双目深度摄像原理及深度图的获取 3.1.1 理想化双目深度相机成像...

设计模式(十一)策略模式

请直接看原文:设计模式(十一)策略模式_某移动支付系统在实现账户资金转入和转出时需要进行身份验证,该系统为用户提供了-CSDN博客 ----------------------------------------------------------------------------------------------------------------…...

Java 计算某年份二月的天数

一、实验任务 要求编写一个程序,从键盘输入年份,根据输入的年份计算这一年的2月有多少天。 二、实验内容 三、实验结果 四、实现逻辑和步骤 (1)使用scanner类实现程序使用键盘录入一个年份。 (2)使用if语…...

unity 数学 如何计算线和平面的交点

已知一个平面上的一点P0和法向量n,一条直线上的点L0和方向L,求该直线与该平面的交点P 如下图 首先我们要知道向量归一化点乘之后得到就是两个向量的夹角的余弦值,如果两个向量相互垂直则值是0,小于0则两个向量的夹角大于90度,大于…...

Mysql DATETIME与TIMESTAMP的区别

TIMESTAMP的取值范围小,并且TIMESTAMP类型的日期时间在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值。 而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。 DATETI…...

hadoop基础

启动Hadoop cd /usr/local/hadoop ./sbin/start-dfs.sh #启动hadoop打开 ./bin/hdfs dfs ./bin/hdfs dfs -ls 针对 DataNode 没法启动的解决方法 cd /usr/local/hadoop ./sbin/stop-dfs.sh # 关闭 rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS 中原有的…...

2024目前三种有效加速国内Github

大家好我是咕噜美乐蒂,很高兴又和大家见面了!截至2024年,国内访问 GitHub 的速度受到多种因素的影响,包括网络封锁、地理距离、网络带宽等。为了提高国内用户访问 GitHub 的速度,以下是目前较为有效的三种加速方式&…...

2024高频前端面试题 HTML 和 CSS 篇

JS和ES6 篇: ​​​​​​​2024高频前端面试题 JavaScript 和 ES6 篇-CSDN博客 一 . HTML 篇 1. H5有什么新特性 1) 语义化标签 用正确的标签做正确的事情。 html 语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析&…...

LeetCode 100231.超过阈值的最少操作数 I

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次操作中,你可以删除 nums 中的最小元素。 你需要使数组中的所有元素都大于或等于 k ,请你返回需要的 最少 操作次数。 示例 1: 输入:nums [2,11,10,1,3], k 10 输…...

Pygame教程01:初识pygame游戏模块

Pygame是一个用于创建基本的2D游戏和图形应用程序。它提供了一套丰富的工具,让开发者能够轻松地创建游戏和其他图形应用程序。Pygame 支持许多功能,包括图像和声音处理、事件处理、碰撞检测、字体渲染等。 Pygame 是在 SDL(Simple DirectMed…...

文件(内部/外部)存储

Android 文件存储主要分为**内部存储**、**外部存储**(现在叫分区存储)和**其他介质**(如 SD 卡、USB)。理解它们的区别对开发很重要,特别是 Android 10+ 引入的**分区存储**机制。 1. 内部存储 (Internal Storage) 特点:私有、安全、随应用卸载而删除。其他应用和用户…...

10.3处理流程设计-系统设计-人机界面设计

一、流程设计 00:00 1. 流程设计工具 00:25 1)程序流程图 00:32 基本概念: 用图框表示各种操作,独立于程序设计语言,直观清晰结构组成: 仅由顺序、选择和循环三种基本结构组合或嵌套而成应用场景: 可描述…...

PD 2.0 与 PD 3.0 深度解析:从固定档位到 PPS 精细化供电的技术演进

USB Power Delivery(USB PD)是USB-IF制定的通用快充与供电协议,依托Type-C接口实现高功率、多功能电力传输,已成为手机、笔记本、平板、外设等设备的主流供电标准。PD 2.0奠定高功率快充基础,PD 3.0则以PPS可编程电源为…...

告别固定菜单!用YOLO-World实现‘看图说话’式物体检测,保姆级环境搭建与实战教程

告别固定菜单!用YOLO-World实现‘看图说话’式物体检测,保姆级环境搭建与实战教程 想象一下,你正在开发一款智能家居应用,需要识别用户随意描述的物品——比如"放在沙发左侧的无线充电器"或"窗台上那盆多肉植物&qu…...

保姆级教程:用本地仓库模拟Maven多模块依赖冲突(附版本锁定技巧)

从零构建Maven多模块实验:深度解析依赖冲突与版本锁定策略 实验环境搭建与基础概念 让我们从一个真实的开发场景开始:假设你正在维护一个电商平台的后端系统,这个系统由订单服务(order-service)、支付服务(…...

使用Spring AI Alibaba构建智能体Agent竟

背景 在软件开发的漫长旅途中,"构建"这个词往往让人又爱又恨。爱的是,一键点击,代码变成产品,那是程序员最迷人的时刻;恨的是,维护那一堆乱糟糟的构建脚本,简直是噩梦。 在很多项目中…...

实战指南:构建坚不可摧的vCenter HA高可用集群

1. 为什么你的企业需要vCenter HA高可用集群 记得去年有个客户半夜给我打电话,说他们的vCenter突然宕机,整个虚拟化平台瘫痪了。当时正是业务高峰期,损失惨重。这就是典型的单点故障问题——vCenter作为整个vSphere环境的大脑,一旦…...

5种革命性用法:用DDrawCompat让经典游戏在现代系统上重生

5种革命性用法:用DDrawCompat让经典游戏在现代系统上重生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDr…...

WeChatExporter:开源微信聊天记录备份与查看解决方案

WeChatExporter:开源微信聊天记录备份与查看解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 微信作为日常沟通的重要工具,承载着大量有价…...

MySQL 实战进阶:从单表优化到分布式数据库适配

MySQL 实战进阶:从单表优化到分布式数据库适配 在企业业务发展的不同阶段,MySQL 的应用场景从简单的单表查询,逐步演进到高并发、海量数据的处理场景。多数开发者在入门 MySQL 后,容易陷入“会用但不会优”的困境——单表数据量激…...