从向量中移除元素,而不移除之后的元素

Removing an element from the vector without removing the elements after

本文关键字:元素 之后 向量      更新时间:2023-10-16

来自Java并使用ArrayList类让我在学习C++等价物(Vectors)时感到非常沮丧。

我正在编写一个函数,它从int向量中删除给定的某个int。有一段时间,我不明白为什么它会导致分割错误。在看了文档后,我意识到。擦除也会删除被擦除的元素之后的任何元素。这绝对不是我想做的,所以我有点不知道如何从向量中只移除一个元素,而不移除之后的元素。

我目前拥有的导致分段故障的功能:

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

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

如果用a替换(n-1),它应该可以工作:

        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);
}
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

您将需要iterator erase ( iterator first, iterator last );

请看这里。(http://www.cplusplus.com/reference/stl/vector/erase/)