C++ <vector> функция pop_back

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


Среди множества операций с контейнерами,pop_backявляется очень практичной функцией, используемой дляудаления элемента в конце вектора。

pop_backявляется функцией-членом классов контейнеров, используемой для удаления последнего элемента контейнера. Размер контейнераsize()уменьшится на 1.

pop_backРеализованоДинамическое сокращениеконтейнера, позволяющее в любой момент удалять конечные элементы, которые больше не нужны.

Определения слов: pop— это pop,backозначает "back", вместе это означает удаление элемента с конца, что очень наглядно.


Базовый синтаксис и параметры

pop_backявляется функцией-членом классов контейнеров, поэтому сначала нужно иметь объект контейнера, а затем использовать оператор точки.чтобы вызвать её.

Формат синтаксиса

void pop_back();

Описание параметра

  • Параметр: Нет параметров
    • pop_backне принимает аргументов.

Описание функции

  • Возвращаемое значение: void(не возвращает значение). Его цель — исключительно "удалить элемент"; как только удаление выполнено, функция завершается.
  • Влияниена контейнерsize()(текущее количество элементов) уменьшается на 1. Исходный последний элемент удаляется.
  • Примечание: Если контейнер пуст, вызовpop_backявляется неопределённым поведением. Перед вызовом следует сначала проверить, пуст ли контейнер (используяempty()функцию).

Пример

Давайте досконально освоим его с помощью серии примеров от простого к сложному.pop_backИспользование.

Пример 1: Базовое использование - удаление последнего элемента

Пример

#include <iostream>
#include <vector> // 1. Необходимо включить заголовочный файл vector

int main() {
    // 2. Создайте вектор и добавьте несколько элементов
    std::vector<int> numbers = {10, 20, 30, 40, 50};

    std::cout << "Изначально размер вектора равен: " << numbers.size() << std::endl;
    std::cout << "Элементы: ";
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    // 3. Используйте pop_back, чтобы удалить последний элемент
    numbers.pop_back(); // Удалить последний элемент (50)
    std::cout << После удаления одного элемента размер равен: << numbers.size() << std::endl;

    numbers.pop_back(); // Удалить последний элемент (40)
    std::cout << После удаления ещё одного элемента размер равен: << numbers.size() << std::endl;

    // 4. Пройти и вывести все элементы
    std::cout << Оставшиеся элементы:;
    for(int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

Ожидаемый результат выполнения:

初始时,vector的大小是: 5
元素是: 10 20 30 40 50
删除一个元素后,大小是: 4
再删除一个元素后,大小是: 3
剩余的元素是: 10 20 30

Анализ кода:

  1. #include <vector>заключается в использованииvectorПредпосылка контейнера.
  2. std::vector<int> numbers = {10, 20, 30, 40, 50};создал ... содержащий 5 элементовvector。
  3. дваждыpop_backвызов, последовательно удалил завершающие50и40。
  4. после каждого вызова, контейнераsize()Все уменьшатся на 1.

Пример 2: Безопасное использование pop_back — проверка, пуст ли контейнер

При вызовеpop_back, лучше проверить, пуст ли контейнер, чтобы избежать неопределённого поведения.

Пример

#include <iostream>
#include <vector>
#include <string>

int main() {
    // Создать вектор, который хранит строки
    std::vector<std::string> tasks = {"Изучить C++", "Сделать домашнее задание", "Читать документацию"};

    std::cout << Количество задач: << tasks.size() << std::endl;

    // Безопасно удалить последний элемент
    while(!tasks.empty()) {
        std::cout << Выполнено: << tasks.back() << std::endl;
        tasks.pop_back(); // Удалить последний элемент
        std::cout << Осталось задач: << tasks.size() << std::endl;
    }

    // Попробовать удалить ещё раз (контейнер теперь пуст)
    if(tasks.empty()) {
        std::cout << Больше нет задач! << std::endl;
    }

    return 0;
}

Ожидаемый результат выполнения:

待办事项数量: 3
完成: 阅读文档
剩余待办事项: 2
完成: 写作业
剩余待办事项: 1
完成: 学习 C++
剩余待办事项: 0
没有更多待办事项了!

Анализ кода:

  • !tasks.empty()проверяет, не пуст ли контейнер.
  • tasks.back()возвращает последний элемент (не удаляя его); здесь он используется, чтобы показать, какая задача была выполнена.
  • ИспользованиеwhileКоординация циклаempty()проверка, вы можете безопасно очистить весь контейнер.

Пример 3: Реализация простого стека с использованием pop_back

push_backиpop_backПри совместном использовании они позволяют реализовать простую структуру стека.

Пример

#include <iostream>
#include <vector>

class Stack {
private:
    std::vector<int> data;

public:
    // Добавить
    void push(int value) {
        data.push_back(value);
    }

    // Извлечь
    void pop() {
        if(!data.empty()) {
            data.pop_back();
        }
    }

    // Получить верхний элемент стека
    int top() {
        if(!data.empty()) {
            return data.back();
        }
        return -1; // Указывает, что стек пуст
    }

    // Проверить, пуст ли стек
    bool empty() {
        return data.empty();
    }

    // Получить размер стека
    size_t size() {
        return data.size();
    }
};

int main() {
    Stack s;

    // Операция push
    s.push(10);
    s.push(20);
    s.push(30);

    std::cout << Размер стека: << s.size() << std::endl;
    std::cout << Верхний элемент стека: << s.top() << std::endl;

    // Операция pop
    s.pop();
    std::cout << После извлечения верхний элемент: << s.top() << std::endl;

    s.pop();
    std::cout << После повторного извлечения верхний элемент: << s.top() << std::endl;

    s.pop();
    std::cout << После повторного извлечения стек пуст: << (s.empty() ? Да : Нет) << std::endl;

    return 0;
}

Этот пример показывает, как использоватьpop_backчтобы реализовать операцию pop стека.push_backСоответствует push,pop_backСоответствует pop.


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

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