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

C++ <vector> pop_back 函数

C++ 容器类 <vector> C++ 容器类 <vector>


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

运行结果预期:

初始时,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 调用,依次删除了末尾的 5040
  4. 每次调用后,容器的 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;
}

运行结果预期:

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

代码解析:

  • !tasks.empty() 检查容器是否不为空。
  • tasks.back() 返回最后一个元素(不删除),这里用于显示完成了什么任务。
  • 使用 while 循环配合 empty() 检查,可以安全地清空整个容器。

示例 3:使用 pop_back 实现简单的栈

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

这个例子展示了如何用 pop_back 实现栈的出栈操作。push_back 对应入栈,pop_back 对应出栈。


C++ 容器类 <vector> C++ 容器类 <vector>