从矢量中删除元素而不删除元素

时间:2012-01-30 17:25:59

标签: c++ vector

来自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;
        }
    }
}

3 个答案:

答案 0 :(得分:3)

您正在寻找n作为元素,但也将其用作索引。我认为这不是你想要的。

如果您将(n-1)替换为a,则应该有效:

        list.erase(list.begin()+a);

使用finderase删除单个元素的替代方法:

#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/