C++ <vector> pop_back 函数
在众多容器操作中,pop_back 是一个非常实用的函数,用于删除 vector 末尾的元素。
pop_back 是容器类的成员函数,用于删除容器最后一个元素,容器的 size() 会减少 1。
pop_back实现了容器的动态缩减,让你可以随时移除不再需要的末尾元素。
单词释义: pop 是弹出,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. 创建一个 vector 并添加一些元素
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "初始时,vector的大小是: " << 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;
}
#include <vector> // 1. 必须包含 vector 头文件
int main() {
// 2. 创建一个 vector 并添加一些元素
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "初始时,vector的大小是: " << 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 <iostream>
#include <vector>
#include <string>
int main() {
// 创建一个存储字符串的 vector
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;
}
#include <vector>
#include <string>
int main() {
// 创建一个存储字符串的 vector
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;
// 入栈操作
s.push(10);
s.push(20);
s.push(30);
std::cout << "栈的大小: " << s.size() << std::endl;
std::cout << "栈顶元素: " << s.top() << std::endl;
// 出栈操作
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;
}
#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;
// 入栈操作
s.push(10);
s.push(20);
s.push(30);
std::cout << "栈的大小: " << s.size() << std::endl;
std::cout << "栈顶元素: " << s.top() << std::endl;
// 出栈操作
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 实现栈的出栈操作。push_back 对应入栈,pop_back 对应出栈。

C++ 容器类 <vector>