C++ <list> push_back 函数
在众多容器中,list (双向链表) 是一种高效插入和删除的数据结构,而 push_back 就是在链表末尾添加元素的关键函数。
push_back 是一个成员函数,用于在链表 (list) 的末尾添加一个新元素。
push_back 实现了链表的动态增长,你不需要预先指定容器最终的大小,可以根据程序运行时的需要,随时随地添加元素。
单词释义: push 是推入,back 是后面,合起来就是推入到后面,非常形象。
基本语法与参数
push_back 是容器类的成员函数,因此你需要先有一个容器对象,然后通过点运算符 . 来调用它。
语法格式
void push_back(const T& value); void push_back(T&& value); // C++11 之后(支持右值)
参数说明
- 参数:
value- 类型: 与容器定义时指定的元素类型一致,或者是可以转换为该类型的值。
- 描述: 你想要添加到容器末尾的那个值。可以是一个变量、一个字面量(如
10,"hello"),或者一个表达式的结果。
函数说明
- 返回值:
void(无返回值)。它的作用纯粹是"添加元素",添加完成后函数就结束了。 - 效果: 容器的
size()(当前元素个数) 会增加 1。新元素成为链表的最后一个元素。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 push_back 的用法。
示例 1:基础用法 - 管理整数
实例
#include <iostream>
#include <list> // 1. 必须包含 list 头文件
int main() {
// 2. 创建一个空的 list,用于存放整数
std::list<int> numbers;
std::cout << "初始时,list的大小是: " << numbers.size() << std::endl;
// 3. 使用 push_back 添加元素
numbers.push_back(10); // 在末尾添加整数 10
numbers.push_back(20); // 在 10 后面添加 20
numbers.push_back(30); // 在 20 后面添加 30
std::cout << "添加后,list的大小是: " << numbers.size() << std::endl;
// 4. 遍历并输出所有元素
std::cout << "list中的元素是: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
#include <list> // 1. 必须包含 list 头文件
int main() {
// 2. 创建一个空的 list,用于存放整数
std::list<int> numbers;
std::cout << "初始时,list的大小是: " << numbers.size() << std::endl;
// 3. 使用 push_back 添加元素
numbers.push_back(10); // 在末尾添加整数 10
numbers.push_back(20); // 在 10 后面添加 20
numbers.push_back(30); // 在 20 后面添加 30
std::cout << "添加后,list的大小是: " << numbers.size() << std::endl;
// 4. 遍历并输出所有元素
std::cout << "list中的元素是: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
运行结果预期:
初始时,list的大小是: 0 添加后,list的大小是: 3 list中的元素是: 10 20 30
代码解析:
#include <list>是使用list容器的前提。std::list<int> numbers;创建了一个名为numbers的空list,它未来将存储int类型的整数。- 三次
push_back调用,依次将10,20,30添加到numbers的末尾。添加顺序就是元素在list中的最终顺序。 numbers.size()返回当前元素个数。
示例 2:管理字符串
list 不仅可以存数字,还能存字符串、自定义类型等任何数据类型。
实例
#include <iostream>
#include <list>
#include <string>
int main() {
// 创建一个存储 std::string 的 list
std::list<std::string> tasks;
// 使用 push_back 添加待办事项
tasks.push_back("学习 C++ list");
tasks.push_back("写作业");
tasks.push_back("阅读技术文档");
std::cout << "今日待办事项 (" << tasks.size() << " 项):" << std::endl;
for(const auto& task : tasks) {
std::cout << "- " << task << std::endl;
}
return 0;
}
#include <list>
#include <string>
int main() {
// 创建一个存储 std::string 的 list
std::list<std::string> tasks;
// 使用 push_back 添加待办事项
tasks.push_back("学习 C++ list");
tasks.push_back("写作业");
tasks.push_back("阅读技术文档");
std::cout << "今日待办事项 (" << tasks.size() << " 项):" << std::endl;
for(const auto& task : tasks) {
std::cout << "- " << task << std::endl;
}
return 0;
}
运行结果预期:
今日待办事项 (3 项): - 学习 C++ list - 写作业 - 阅读技术文档
代码解析:
std::list<std::string>声明了元素类型为std::string的容器。push_back的参数是字符串字面量。
示例 3:结合 push_front 使用
push_back 和 push_front 可以配合使用构建链表。
实例
#include <iostream>
#include <list>
int main() {
std::list<int> data;
// 先在头部添加
data.push_front(30);
data.push_front(20);
data.push_front(10);
// 再在尾部添加
data.push_back(40);
data.push_back(50);
std::cout << "元素: ";
for(int n : data) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
#include <list>
int main() {
std::list<int> data;
// 先在头部添加
data.push_front(30);
data.push_front(20);
data.push_front(10);
// 再在尾部添加
data.push_back(40);
data.push_back(50);
std::cout << "元素: ";
for(int n : data) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
运行结果预期:
元素: 10 20 30 40 50
代码解析:
- 先使用
push_front在头部添加 10, 20, 30 - 再使用
push_back在尾部添加 40, 50 - 最终顺序是 10 -> 20 -> 30 -> 40 -> 50

C++ 容器类 <list>