答案:C++中vector删除元素主要用erase()和pop_back();erase()可删单个或区间元素,pop_back()删末尾元素,结合remove与erase可实现条件删除,需注意迭代器失效问题。
在C++中,vector 删除元素主要通过 erase() 和 pop_back() 方法实现。根据删除位置和数量的不同,选择合适的方法可以提高代码效率和可读性。
使用 erase() 删除指定位置或范围的元素
erase() 是 vector 中最常用的删除方法,可用于删除单个元素或一段区间内的多个元素。
• 删除单个元素:传入要删除元素的迭代器
• 删除一个范围:传入起始和结束迭代器
• 注意:erase() 会改变容器大小,且被删除位置之后的元素会前移
示例:
#include <vector> #include <iostream> using namespace std; int main() { vector<int> vec = {10, 20, 30, 40, 50}; // 删除第二个元素(值为20) vec.erase(vec.begin() + 1); // 删除从第2个到第4个元素(左闭右开) vec.erase(vec.begin() + 1, vec.begin() + 3); for (int n : vec) { cout << n << " "; } return 0; }
使用 pop_back() 删除最后一个元素
pop_back() 用于快速删除 vector 的最后一个元素,不返回值,仅修改容器。
立即学习“C++免费学习笔记(深入)”;
• 时间复杂度为 O(1)
• 调用前应确保容器非空,否则行为未定义
示例:
vec.pop_back(); // 移除末尾元素
结合 remove() 和 erase() 实现条件删除(erase-remove 惯用法)
如果需要删除满足特定条件的所有元素(如所有值为 x 的元素),推荐使用 erase-remove 惯用法。
• 先用 remove() 将目标元素移到末尾
• 再用 erase() 真正删除它们
示例:删除所有值为30的元素
vec.erase(remove(vec.begin(), vec.end(), 30), vec.end());
若使用谓词删除更复杂的条件(如所有偶数):
vec.erase(remove_if(vec.begin(), vec.end(), [](int n){ return n % 2 == 0; }), vec.end());
基本上就这些常用方式。注意迭代器失效问题:调用 erase() 后,指向被删元素及之后位置的迭代器将失效,需谨慎处理循环中的迭代器更新。