C++ std::vector 循环删除元素的最佳实践
在循环中删除 std::vector 中的元素可能会导致问题,因为每次删除元素后,向量的大小会发生变化,从而影响迭代器的有效性。以下是一种解决方案:
-
使用反向迭代器进行循环,这样可以确保在删除元素时向量的大小不会影响迭代器的有效性。
-
使用
erase函数删除元素,它会将指定位置的元素从向量中移除,并将后面的元素向前移动。
以下是示例代码:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec{1, 2, 3, 4, 5};
// 使用反向迭代器循环删除元素
for (auto iter = vec.rbegin(); iter != vec.rend(); ++iter) {
if (*iter % 2 == 0) {
vec.erase(std::next(iter).base());
}
}
// 输出结果
for (auto i : vec) {
std::cout << i << " ";
}
return 0;
}
此代码将删除向量中的所有偶数,并输出结果:1 3 5
原文地址: https://www.cveoy.top/t/topic/ngcy 著作权归作者所有。请勿转载和采集!