提供数据结构的抽象,隐藏底层内存管理细节:
• 序列容器:std::vector
(动态数组)、std::list
(双向链表)、std::deque
(双端队列)等。
• 关联容器:std::map
(有序键值对)、std::unordered_map
(哈希表)、std::set
(唯一键集合)等。
• 适配器:std::stack
(栈)、std::queue
(队列)、std::priority_queue
(优先队列)等。
示例:
#include
#include
std::vector<int> vec = {1, 2, 3}; // 动态数组
std::unordered_map<std::string, int> scores = {{"Alice", 90}, {"Bob", 85}}; // 哈希表
作用:避免手动管理内存,提供类型安全的数据操作。
提供遍历容器的统一抽象接口,无需关心底层数据结构:
• 类型:输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器等。
• 使用方式:通过begin()
和end()
获取迭代器范围。
示例:
std::vector<int> vec = {1, 2, 3};
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
作用:实现算法与容器的解耦(例如std::sort
可作用于任何支持随机访问的容器)。
提供通用算法,通过迭代器操作容器:
• 常见算法:std::sort
(排序)、std::find
(查找)、std::transform
(转换)、std::accumulate
(累加)等。
示例:
#include
std::vector<int> vec = {3, 1, 4, 1, 5};
std::sort(vec.begin(), vec.end()); // 排序
auto it = std::find(vec.begin(), vec.end(), 4); // 查找元素
作用:避免重复实现通用逻辑,提升代码复用性。
管理动态内存的抽象,自动释放资源(基于RAII):
• 类型:std::unique_ptr
(独占所有权)、std::shared_ptr
(共享所有权)、std::weak_ptr
(避免循环引用)。
示例:
#include
auto ptr = std::make_unique<int>(42); // 自动释放内存
auto shared = std::make_shared<std::string>("Hello"); // 引用计数
作用:避免内存泄漏和悬空指针。
std::string
)封装字符数组,提供安全的字符串操作:
• 功能:动态调整大小、拼接、查找、替换等。
示例:
std::string s = "Hello";
s += " World!"; // 自动管理内存
size_t pos = s.find("World"); // 安全操作
作用:避免手动处理char[]
的缓冲区溢出问题。
统一接口处理文件、控制台和字符串的输入输出:
• 类:std::iostream
(基类)、std::fstream
(文件流)、std::stringstream
(字符串流)。
示例:
#include
#include
std::ofstream file("data.txt");
file << "Write to file"; // 抽象文件操作
std::stringstream ss;
ss << "Read from stream"; // 抽象字符串操作
作用:统一接口简化I/O操作,支持类型安全的格式化。
将函数抽象为对象,支持泛型编程:
• 工具:std::function
(通用函数包装器)、Lambda表达式、函数适配器(如std::bind
)。
示例:
#include
std::function<int(int, int)> add = [](int a, int b) { return a + b; };
int result = add(2, 3); // 输出5
作用:支持回调、高阶函数和函数式编程范式。
提供编译时的类型检查和操作:
• 工具:
中的类型特征(如std::is_integral
)、C++20的concepts
。
示例:
#include
static_assert(std::is_integral<int>::value, "int is integral");
作用:支持模板元编程和泛型约束。
简化多线程和异步编程:
• 工具:std::thread
(线程)、std::mutex
(互斥锁)、std::future
/std::promise
(异步结果)等。
示例:
#include
std::thread t([]() { std::cout << "Hello from thread!"; });
t.join();
作用:提供跨平台的多线程支持,避免直接操作底层API。
时间点和时间段的抽象:
• 工具:std::chrono::duration
(时间段)、std::chrono::time_point
(时间点)。
示例:
#include
auto start = std::chrono::high_resolution_clock::now();
// 执行代码...
auto end = start + std::chrono::seconds(1);
作用:精确测量时间,避免直接处理平台相关的计时器。
C++标准库通过提供这些抽象设施,将底层复杂性(如内存管理、线程同步、类型操作等)封装为高级接口,开发者可以更专注于业务逻辑,同时保证代码的:
std::sort
通常比手写快速排序更快)。现代C++开发中,应优先使用这些抽象设施,而非手动实现底层逻辑。