【发布时间】:2021-08-20 20:52:14
【问题描述】:
我编写了一个小程序来从向量中删除 0。但是当我检查时,向量中仍然有一个零。为什么?
大小应该是 3 时显示为 4,但仍然显示为零。
int main()
{
vector<int> nums1 = {1, 2, 3, 0, 0, 0};
for(int i=0; i< nums1.size(); i++)
{
if(nums1[i] == 0)
nums1.erase(nums1.begin() + i);
}
cout << "size is now: " << nums1.size() << endl;
for(int j=0; j<nums1.size(); j++)
cout<< nums1[j] << endl;
return 0;
}
【问题讨论】:
-
当迭代删除一个元素时,你不应该增加
i。否则,您将跳过现在占据您删除的元素位置的元素。您应该使用调试器单步执行您的代码,看看会发生什么。 -
另外我建议阅读iterators。
-
使用迭代器进行枚举,并利用
erase的返回值。更好的是,使用remove/erase idiom -
您可能需要阅读How do I remove an item from a stl vector with a certain value? 以获得更好的方法。
-
"从向量中删除 0" - C++20 起:
std::erase/erase_if(std::vector)