渐进式编程课
C++ 目录
第 20 课2026.09.28

把上一课得到的目标课程放入课程列表,不再依赖该目标对象的原标题。

第 20 课:移动课程对象进入列表

  • 日期:2026-09-28
  • 课程序号:第 20 课
  • 知识点:vector::push_back 接收右值

用途或适用场景

把上一课得到的目标课程放入课程列表,不再依赖该目标对象的原标题。

核心概念

push_back(std::move(moved)) 选择接收右值的重载;插入后使用列表中的对象,不断言被移动对象的字符串内容。需 C++11 或更新标准。

最小代码或操作示例

cpp
#include <iostream>
#include <string>
#include <utility>
#include <vector>
struct Lesson { std::string title; int minutes; };
int main() {
  Lesson source{"C++", 5};
  Lesson copied = source;
  Lesson moved = std::move(source);
  std::vector<Lesson> lessons;
  lessons.push_back(std::move(moved));
  std::cout << copied.title << " " << lessons[0].title << '\n'; // C++ C++
}

3~5 分钟练习

把 minutes 改为 10,输出列表第一项的时长。

参考答案

把初始对象改为 Lesson source{"C++", 10};,再输出 lessons[0].minutes,结果是 10;不要检查移动后的 moved.title。

与上一课的联系

沿用第 19 课的 Lesson、source、copied、moved;本课只新增把 moved 移入 vector;下一课可遍历列表显示所有课程。

时效校验

时效校验:2026-09-28(已检索并打开 Standard C++ 官方 C++11 容器说明与默认移动语义说明;push_back 右值重载需 C++11+,未见废弃标记)。

官方参考