C++ <list> push_back функция

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. Создайте пустой список для хранения целых чисел
    std::list<int> numbers;

    std::cout << "Изначально размер списка: " << numbers.size() << std::endl;

    // 3. Используйте push_back для добавления элементов
    numbers.push_back(10); // Добавить целое число 10 в конец
    numbers.push_back(20); // Добавить 20 после 10
    numbers.push_back(30); // Добавить 30 после 20

    std::cout << "После добавления размер списка равен: " << numbers.size() << std::endl;

    // 4. Пройти и вывести все элементы
    std::cout << "Элементы списка: ";
    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
    std::list<std::string> tasks;

    // Используйте push_back для добавления задач
    tasks.push_back("Изучить список C++");
    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::stringcontainer.
  • 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;
}

Ожидаемый вывод:

元素: 10 20 30 40 50

Анализ кода:

  • Сначала используйтеpush_frontДобавьте 10, 20, 30 в начало
  • Затем используйтеpush_backДобавьте 40, 50 в конец
  • Итоговый порядок: 10 -> 20 -> 30 -> 40 -> 50

C++ класс контейнера <list>

Другие расширения