C++ <vector> функция pop_back
Среди множества операций с контейнерами,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 <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
Анализ кода:
#include <vector>заключается в использованииvectorПредпосылка контейнера.std::vector<int> numbers = {10, 20, 30, 40, 50};создал ... содержащий 5 элементовvector。- дважды
pop_backвызов, последовательно удалил завершающие50и40。 - после каждого вызова, контейнера
size()Все уменьшатся на 1.
Пример 2: Безопасное использование pop_back — проверка, пуст ли контейнер
При вызовеpop_back, лучше проверить, пуст ли контейнер, чтобы избежать неопределённого поведения.
Пример
#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 <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.
Другие расширения