第二章:C++标准库
2.1 标准输入输出流
iostream
基础:std::cin
、std::cout
和std::cerr
的用法。- 格式化输出:介绍
std::setw
、std::setprecision
等格式化工具。 - 文件I/O基础:通过
fstream
读写文件的简单示例。 - 流的状态管理:如
eof()
、fail()
和bad()
的作用与判断。
2.2 字符串与STL简介
- C风格字符串:
char*
及其局限性。 std::string
类:基本操作(拼接、查找、切片)。std::string str = "Hello"; str += ", World!"; std::cout << str << std::endl;
- 字符串流:使用
std::stringstream
解析字符串内容。 - 初识STL:标准模板库的概念及其通用性。
2.3 容器概览:Vector、List、Map
- Vector动态数组:基本操作(增删、访问、容量管理)。
- List双向链表:特点与应用场景。
- Map键值对容器:
std::map
和std::unordered_map
的对比。 - 选择合适的容器:通过时间复杂度对比帮助选择合适的容器类型。
2.4 迭代器和算法
- 迭代器的种类:输入迭代器、前向迭代器、随机访问迭代器。
- 常用算法:
std::sort
、std::find
、std::for_each
等例子。std::vector<int> vec = {1, 4, 2, 8}; std::sort(vec.begin(), vec.end());
- Lambda表达式与STL算法结合:更灵活的回调函数定义方式。
- 自定义比较器:如何定义自己的排序规则。
2.5 智能指针与内存安全
- RAII简介:资源管理与作用域的结合。
std::unique_ptr
:实现独占式所有权的智能指针。std::shared_ptr
与引用计数:适用于共享资源的指针。std::weak_ptr
:解决循环引用问题的工具。- 实际案例:动态分配对象与资源管理的最佳实践。
2.6 时间和日期处理
<chrono>
库简介:时间点与时钟的概念。- 计时器应用:实现简单的性能测试工具。
auto start = std::chrono::high_resolution_clock::now(); // some code to test auto end = std::chrono::high_resolution_clock::now(); std::cout << "Duration: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count()<< "ms\n";
- 日历日期操作:介绍
std::chrono::year_month_day
等新特性(C++20)。 - 跨平台时间支持:使用
std::time_t
处理本地时间与UTC时间。
2.7 多线程编程(std::thread与std::async)
- 线程的创建与管理:
std::thread
的基础用法。 - 线程同步:使用
std::mutex
与std::lock_guard
避免竞争条件。 - 异步任务:通过
std::async
和std::future
实现任务并发。auto future = std::async(std::launch::async, []() {return compute_result(); }); std::cout << "Result: " << future.get() << std::endl;
- 并行算法(C++17+):
std::execution::par
加速标准算法执行。
2.8 文件I/O操作
- 文件流简介:
std::ifstream
和std::ofstream
的使用。 - 二进制文件操作:读取和写入二进制数据的方式。
- 随机访问文件:利用
seekg
与seekp
进行文件的随机访问操作。 - 文件操作的异常处理:通过
try-catch
保障文件操作的健壮性。
总结
第二章从C++标准库的基础设施入手,帮助读者了解并熟悉现代C++程序开发中的常用工具和组件。通过标准库的学习,读者可以掌握高效、安全、便捷的编程实践方法,为实现复杂功能和更高性能的系统设计提供必要的知识储备。