为了实现“操作数据”这一目的,有了“语句”和“数据类型/结构”。由此我们可以对整个C++语法进行知识重构,先构建这棵树的枝干部分,“语句”包括声明语句、赋值语句、运算语句、控制语句、异常处理语句、函数代码块。“数据类型/结构”包括基本数据类型、数据结构、自定义数据类型\结构。
一、语句:
声明语句:变量声明、函数声明、数据类型/结构声明等
赋值语句:左值、右值等
运算语句:数字计算、逻辑运算等
控制语句:if语句switch语句、for循环、while循环、goto语句等
二、数据类型/结构:
基本数据类型:char、int、float、double、bool、void
数据结构:数组、字符串、结构体、联合、枚举
自定数据类型\结构:类、类模板
为了能够减少重复代码,提高代码可读性和可维护性,语言中往往有函数这一特性,让我们能够抽象语句,使之成为一个可重复调用的代码块。
一>函数:
void函数
常规函数
内联函数
重载函数
模板函数
递归函数
为了更为高效的实现“操作数据”这一目的,C++之中有指针,让我们能够直接操作内存,省去了各种中间开销。而指针则很像这棵树各个枝干上的叶子,任何部分都与它息息相关,都与它产生了某种故事。也因此,指针的掌握变得非常困难,因为它几乎可以和C++中的任何事情扯上关系。
二>指针:
指针
指针的运算
指针和数组
指针和函数
指针和结构体
指针和其他数据类型/结构
指针和引用的区分
二>内存管理:
申请/释放内存
内存中的栈与堆
各种数据内存结构布局
生命周期
数据占用大小计算
明晰数据的自动释放和手动释放
C++之中有其本身约定好定义好的数据规则提供给你,比如简单数据类型(整数、浮点数、双精度浮点数等)、数据结构(数组、结构体等),如果需要更多的控制,则进而可以在它们的基础上添加修饰符(short、long、unsigned、const、static、inline等),这些是语言本身提供给你的,还有一大重要的部分是,你自己定义数据的组织形式,在C++中通过类、类模板来实现。类这一部分是枝干上一个非常庞大的部分。
二>3、类:
类和对象
类的构造函数和析构函数
类的this指针
类的const成员和static成员
类的运算符重载
访问控制、友元函数
二>3、类进阶:
自定义类型转换
C++默认在背后自动的操作
深拷贝、浅拷贝
智能指针
派生类
虚函数
继承类
二>3、类模板
类模板
模板的非类型参数
类模板的特化
你可以选择自己定义和设计一个自己的数据类型/结构,来组织和处理某种数据,但往往我们会选择前人已经细心雕琢和无数人验证过的标准库或第三方库。在这些标准库或第三方库中,会有已经定义好的数据类型/结构、提供某种功能的接口、已经设计好的算法等。比如你要处理图片,你需要定义一个矩阵,通过类或结构体可以实现,但在OpenCV内已经提供了一个由很多专家设计的类了,通过使用他们定义和设计好的数据类型/结构,高效便捷的处理和操作数据。而掌握前面所述内容,一方面是为了更好的了解专家设计的数据类型/结构,另一方面也是为以后你也可以设计出高质量的数据类型/结构打下基础。
三、C++ STL
容器:用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法:算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
迭代器:迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。
四、C/C++标准库
<- C标准库 ->
标准函数库:继承自C语言标准库
<- 输入输出 ->
<iostream>: 标准输入输出流
<fstream>: 文件输入输出流
<sstream>: 字符串流
<iomainip>: 输入输出流格式化
<- 各种工具 ->
<cstdlib>: 提供了各种通用的函数工具
<array>: 定长数组容器
<vector>: 动态数组容器
<deque>: 双端队列容器
<list>: 双向链表容器
<forward_list>: 单向链表容器
<stack>: 栈容器适配器
<queue>: 队列容器适配器
<priority_queue>: 优先队列容器适配器
<- 复杂容器 ->
<set>: 集合容器(基于平衡二叉树)
<unordered_set>: 无序集合容器(基于哈希表)
<map>: 映射容器(键值对,基于平衡二叉树)
<unordered_map>: 无序映射容器(基于哈希表)
<bitset>: 二进制位容器
<- 算法和迭代器 ->
<algorithm>: 常用算法(如排序、查找等)
<iterator>: 迭代器
<- 函数和对象绑定 ->
<functional>: 定义函数对象 及相关工具
<- 数学和数字运算 ->
<numeric>: 数值操作(如累计、乘积等)
<complex>: 复数运算
<valarray>: 数组类及相关操作
<cmath>: 数学函数
<- 字符串和正则 ->
<string>: 标准字符串类
<regex>: 正则表达式
<- 时间和日期 ->
<ctime>: 时间处理
<chrono>: 时间库
<- 多线程和并发 ->
<thread>: 多线程支持
<mutex>: 互斥量
<condition_variable>: 条件变量
<future>: 异步编程支持
<atomic>: 原子操作
<- 内存管理 ->
<memory>: 智能指针及动态内存管理
<new>: 动态内存分配
<- 类型特性和运行时类型识别 ->
<type_traits>: 类型特性
<typeinfo>: 运行时类型 识别
<- 异常处理 ->
<exception>: 异常处理基类及相关工具
<stdexcept>: 常用异常类(如 std::runtime_error 等)
Qt: 是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
Clmg: 是一个小型的C++图像处理库,适用于快速开发和原型设计。它具有简单易用的API和高效的图像处理算法。
OpenCV: 是一个开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法,适用于各种应用领域。 ITK: 是一个专门用于医学图像处理的开源工具包,提供了丰富的算法和工具,用于分割、配准、重建等医学图像处理任务。 Dlib: 是一个强大的C++机器学习工具包,包括许多图像处理和计算机视觉功能,如人脸检测、对象跟踪、特征点检测等。