C++启蒙课程:第16章 string类和标准模板库
我们将迎来“超级宝库”——STL!掌握 `string`、`vector`、智能指针和算法,用最少的代码完成最复杂的任务!
魔法绳索与弹性数组
掌握“自动伸缩的魔法绳” `string` 和“超级弹性数组” `vector`。
内存保镖与数据导航
认识“内存的智能保镖” `unique_ptr` 和“数据GPS” `iterator`。
通用指令与函数魔术师
学会“可携带的函数机器人” `Functor` 和“万能操作指令” `algorithm`。
课时一:魔法绳索与弹性数组
(覆盖知识点 16.1, 16.3, 16.7)
16.1.2 “魔法绳索” (string I/O)
`cin` 机器人遇到空格就停下。`getline()` 机器人能把“魔法绳”拉长,装下整行。
16.3 “超级弹性数组” (vector)
`vector` 是“弹性数组”。你不需要预先知道大小,用 push_back() 就能自动“伸长”装下新数据。
课时二:内存保镖与数据导航
(覆盖知识点 16.2, 16.4)
16.2 “内存的智能保镖”
`unique_ptr` 是“智能保镖”,它拥有数据的“独家契约”。所有权必须用 std::move 转移,原指针失效。
16.4 “数据探险家的GPS”
迭代器 (it) 就像一个GPS。++it 是“移动到下一个位置”,*it 是“读取当前位置的数据”。
vector v = {10, 20, 30}课时三:通用指令与函数魔术师
(覆盖知识点 16.5, 16.6)
16.5 “可携带的函数机器人”
函数对象 (Functor) 是一个重载了 () 的对象。它像一个机器人,既能执行指令 (()),还能携带“状态”(成员变量)。
16.6 “万能操作指令” (算法)
STL 算法 (如 std::sort) 是“万能指令”。它们不关心容器,只关心你用“GPS” (迭代器) 告诉它的起止点。
vector scores = {95, 88, 100, 75}编程实践与作业
是时候检验你作为“STL效率大师”的实力了!
练习 1:字符串与弹性数组 (16.1, 16.3)
任务:
编写程序,要求用户输入5个水果的名称(使用 string,可包含空格),将它们存储在一个 vector 中。然后使用基于范围的 for 循环打印出所有名称。
点击查看参考答案
练习 2:内存保镖 (unique_ptr) (16.2)
任务:
编写一个程序,演示如何使用 unique_ptr 分配一个动态整数,并使用 std::move 将其所有权转移给另一个指针。
点击查看参考答案
练习 3:万能指令 (STL 算法) (16.6)
任务:
编写一个程序,使用 vector 存储一组分数。然后使用 std::sort 算法和 greater 函数符对分数进行**降序**排序。
点击查看参考答案
本章知识点总结与复习
| 核心概念 | 解释/功能 | 关键用法/示例 |
|---|---|---|
| string 类 | “魔法绳索”,自动管理大小和内存。 | string s; getline(cin, s); |
| vector 模板类 | “超级弹性数组”,可在运行时动态调整大小。 | vector |
| 智能指针 | “内存保镖”,在对象过期时自动 `delete`。 | unique_ptr |
| `unique_ptr` | 独占所有权,必须用 `std::move` 转移。 | p2 = std::move(p1); |
| 迭代器 | “数据GPS”,访问容器元素的通用指针。 | v.begin(), *it, ++it |
| 函数对象 (Functor) | 重载了 `operator()` 的类对象,可携带状态。 | class Adder { ... }; |
| STL 算法 | “万能指令”,不依赖容器,操作迭代器区间。 | std::sort(begin, end); |