现在位置: 首页 > C++ 教程 > 正文

C++ <list> push_back 函数

C++ 容器类 <list> C++ 容器类 <list>


在众多容器中,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;
}

运行结果预期:

初始时,list的大小是: 0
添加后,list的大小是: 3
list中的元素是: 10 20 30

代码解析:

  1. #include <list> 是使用 list 容器的前提。
  2. std::list<int> numbers; 创建了一个名为 numbers 的空 list,它未来将存储 int 类型的整数。
  3. 三次 push_back 调用,依次将 10, 20, 30 添加到 numbers 的末尾。添加顺序就是元素在 list 中的最终顺序。
  4. 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;
}

运行结果预期:

今日待办事项 (3 项):
- 学习 C++ list
- 写作业
- 阅读技术文档

代码解析:

  • std::list<std::string> 声明了元素类型为 std::string 的容器。
  • push_back 的参数是字符串字面量。

示例 3:结合 push_front 使用

push_backpush_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;
}

运行结果预期:

元素: 10 20 30 40 50

代码解析:

  • 先使用 push_front 在头部添加 10, 20, 30
  • 再使用 push_back 在尾部添加 40, 50
  • 最终顺序是 10 -> 20 -> 30 -> 40 -> 50

C++ 容器类 <list> C++ 容器类 <list>