前言
C++的基于对象编程范式、常用STL容器和C++11标准。
基于对象编程范式
面向过程编程范式的例子
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int num1 = 1;
int num2 = 2;
int sum = num1 + num2;
cout << sum << endl;
return 0;
}
基于对象编程范式的例子
#include <iostream>
using std::cout;
using std::endl;
class GetSum
{
public:
int calculation(const int &num1, const int &num2)
{
int sum = num1 + num2;
return sum;
}
};
int main()
{
int num1 = 1;
int num2 = 2;
class GetSum get_sum;
int sum = get_sum.calculation(num1,num2);
cout << sum << endl;
return 0;
}
基于对象和面向对象编程范式的区别
基于对象编程范式:
面向对象编程范式:
- 具有“封装”、“继承”和“多态”特性
- 使用虚函数、重写和设计模式等技术
- 常用于大项目
常用STL容器
顺序容器:
关联容器:
数组/向量
名称 | 底层原理 | 说明 |
---|
array | 静态数组 | C++11标准 | vector | 动态数组 | |
链表
名称 | 底层原理 | 说明 |
---|
list | 双向链表 | | forward_list | 单向链表 | C++11标准 |
队列
名称 | 底层原理 | 说明 |
---|
deque | 管理数组+多个被管理数组 | | queue | deque | 容器适配器 | priority_queue | 堆(完全二叉树) | |
栈
图/映射
名称 | 底层原理 | 说明 |
---|
map | 红黑树 | | multimap | 红黑树 | | unordered_map | 哈希表 | C++11标准 | unordered_multimap | 哈希表 | C++11标准 |
集合
名称 | 底层原理 | 说明 |
---|
set | 红黑树 | | multiset | 红黑树 | | unordered_set | 哈希表 | C++11标准 | unordered_multiset | 哈希表 | C++11标准 |
对组
元组
名称 | 底层原理 | 说明 |
---|
tuple | 递归继承类 | C++11标准 |
总表
名称 | 底层原理 | 说明 |
---|
array | 静态数组 | C++11标准 | vector | 动态数组 | | list | 双向链表 | | forward_list | 单向链表 | C++11标准 | deque | 管理数组+多个被管理数组 | | queue | deque | 容器适配器 | priority_queue | 堆(完全二叉树) | | stack | deque | 容器适配器 | map | 红黑树 | | multimap | 红黑树 | | unordered_map | 哈希表 | C++11标准 | unordered_multimap | 哈希表 | C++11标准 | set | 红黑树 | | multiset | 红黑树 | | unordered_set | 哈希表 | C++11标准 | unordered_multiset | 哈希表 | C++11标准 | pair | 结构体struct | | tuple | 递归继承类 | C++11标准 |
C++11标准
依据《C++ Primer中文版(第5版)》XXV页的“C++11的新特性”栏所列顺序
可能常用的用粗体标示
- long long 类型
- 列表初始化
- nullptr 常量
- constexpr 变量
- 类型别名声明
- auto 类型指示符
- decltype 类型指示符
- 类内初始化
- 使用 auto 或 decltype 缩写类型
- 范围 for 语句
- 定义 vector 对象的 vector (向量的向量)
- vector 对象的列表初始化
- 容器的 cbegin 和 cend 函数
- 标准库函数 begin 和 end 函数
- 使用 auto 和 decltype 简化声明
- 除法的舍入规则
- 用大括号包围的值列表赋值
- 将 sizeof 用于类成员
- 范围 for 语句
- 标准库 initializer_list 类
- 列表初始化返回值
- 定义尾置返回类型
- 使用 decltype 简化返回类型定义
- constexpr 函数
- 使用=default 生成默认构造函数
- 类对象成员的类内初始化
- 委托构造函数
- constexpr 构造函数
- 用 string 对象处理文件名
- array 和 forward_list 容器
- 容器的 cbegin 和 cend 函数
- 容器的列表初始化
- 容器的非成员函数 swap
- 容器 insert 成员的返回类型
- 容器的 emplace 成员
- shrink_to_fit
- string 的数值转换函数
- lambda 表达式
- lambda 表达式中的尾置返回类型
- 标准库 bind 函数
- 关联容器的列表初始化
- 列表初始化 pair 的返回类型
- pair 的列表初始化
- 无序容器
- 智能指针
- shared_ptr 类
- 动态分配对象的列表初始化
- auto 和动态分配
- unique_ptr 类
- weak_ptr 类
- 范围 for 语句不能应用于动态分配数组
- 动态分配数组的列表初始化
- auto 不能用于分配数组
- allocator::construct 可使用任意构造函数
- 将=default 用于拷贝控制成员
- 使用=delete 阻止拷贝类对象
- 用移动类对象代替拷贝类对象
- 右值引用
- 标准库 move 函数
- 移动构造函数和移动赋值
- 移动构造函数通常应该是noexcept
- 移动迭代器
- 引用限定成员函数
- function 类模板
- explicit 类型转换运算符
- 虚函数的 override 指示符
- 通过定义类为 final 来组阻止继承
- 虚函数的 override 和 final 指示符
- 删除的拷贝控制和继承
- 继承的构造函数
- 声明模板类型形参为友元
- 模板类型别名
- 模板函数的默认模板参数
- 实例化的显式控制
- 模板函数与尾置返回类型
- 引用折叠规则
- 用 static_cast 将左值转换为右值
- 标准库 forward 函数
- 可变参数模板
- sizeof…运算符
- 可变参数模板与转发
- 标准库 tuple 类模板
- 新的 bitset 运算
- 正则表达式库
- 随机数库
- 浮点数格式控制
- noexcept 异常指示符
- noexcept 运算符
- 内联命名空间
- 继承的构造函数与多重继承
- 有作用域的 enum
- 说明类型用于保存 enum 对象
- enum 的前置声明
- 标准库mem_fn 类模板
- 类类型的 union 成员
大致分类
改进:
- nullptr 常量
- constexpr 变量
- 定义 vector 对象的 vector (向量的向量)
语法糖:
- auto 类型推导
- 列表初始化
- 范围 for 语句
- lambda 表达式
智能指针:
- shared_ptr
- unique_ptr
- weak_ptr
扩充容器:
- array
- forward_list
- unordered_map
- unordered_multimap
- unordered_set
- unordered_multiset
- tuple
扩充库:
移动语义:
- &&右值引用
- std::move()
- 移动构造函数和移动赋值运算符
面向对象编程范式相关:
- explicit
- =default
- =delete
- override
- final
面向泛型编程范式相关:
总结
C++的基于对象编程范式、常用STL容器和C++11标准。
参考资料
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获
|