来自Java并使用ArrayList类让我在尝试学习C ++等价物(Vectors)时感到很沮丧。
我正在编写一个函数,用于删除从int向量中给出的某个int。有一段时间我无法弄清楚它导致分段错误的原因。看完文档之后,我意识到.erase还删除了被删除后的任何元素。这绝对不是我想要做的,所以我有点迷失了如何从矢量中删除单个元素而不删除后面的元素。
我目前拥有的导致分段错误的功能:
void remove(int n){
for(int a=0; a<list.size(); a++){
if(list.at(a)==n){
list.erase (list.begin()+(n-1));
cout << n << " has been erased" << endl;
break;
}
}
}
答案 0 :(得分:3)
您正在寻找n
作为元素,但也将其用作索引。我认为这不是你想要的。
如果您将(n-1)
替换为a
,则应该有效:
list.erase(list.begin()+a);
#include <algorithm>
//...
void removeOne(int n){
vector<int>::iterator found = std::find(list.begin(), list.end(), n) ;
if (found!=list.end())
list.erase(found);
}
答案 1 :(得分:2)
std::vector<int> v;
// fill it up somehow
v.erase(std::remove(v.begin(), v.end(), 99), v.end());
// really remove all elements with value 99
答案 2 :(得分:0)
您将需要iterator erase ( iterator first, iterator last );
见here。 (http://www.cplusplus.com/reference/stl/vector/erase/)