从向量中移除元素,而不移除之后的元素 来自java和使用ARAYLIST类的时候,我在学习C++等价向量时都感到沮丧。p>

从向量中移除元素,而不移除之后的元素 来自java和使用ARAYLIST类的时候,我在学习C++等价向量时都感到沮丧。p>,c++,vector,C++,Vector,我正在写一个函数,它从整数向量中删除给定的某个整数。有一段时间我不明白为什么它会导致分割错误。在看了文档之后,我意识到。擦除也会删除被擦除的元素。这绝对不是我想做的,所以我有点不知道如何从向量中只移除一个元素,而不移除后面的元素 我当前拥有的导致分段错误的函数: void remove(int n){ for(int a=0; a<list.size(); a++){ if(list.at(a)==n){ list.erase (list

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

我当前拥有的导致分段错误的函数:

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;
        }
    }
}
void删除(int n){

对于(inta=0;a您正在寻找
n
作为元素,但也将其用作索引。我认为这不是您想要的

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

        list.erase(list.begin()+a);
使用和删除单个图元的替代方法:

#包括
//...
无效删除一(int n){
vector::iterator found=std::find(list.begin(),list.end(),n);
if(find!=list.end())
列表。删除(找到);
}

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

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

        list.erase(list.begin()+a);
使用和删除单个图元的替代方法:

#包括
//...
无效删除一(int n){
vector::iterator found=std::find(list.begin(),list.end(),n);
if(find!=list.end())
列表。删除(找到);
}

您将需要
迭代器擦除(迭代器优先,迭代器最后);


请参阅。

您将需要
迭代器擦除(迭代器优先,迭代器最后);

见。

std::vector v;
//不知怎么把它加满
v、 擦除(std::remove(v.begin(),v.end(),99),v.end());
//真正删除所有值为99的元素
std::vector v;
//不知怎么把它加满
v、 擦除(std::remove(v.begin(),v.end(),99),v.end());
//真正删除所有值为99的元素

你是对的!需要用一个C++来代替N!愚蠢的错误!谢谢!你是对的!需要用一个代替N!愚蠢的错误!谢谢!我完全误解了你的需要,忽视我!^ ^我完全误解了你的需要,忽视我!^ ^这将删除所有元素的给定值,而不仅仅是第一个。C++习语c仅删除第一个元素的解决方案是使用
std::find
获取要删除的元素的迭代器,然后删除它(首先验证存在这样的元素--
v.erase(v.end())
是未定义的行为)这将删除所有具有给定值的元素,而不是仅是第一个元素。C++第一个简单的解决方法是使用<代码> STD::查找< /C> >将要被删除的元素的迭代器,然后擦除它(首先验证有这样的元素--<代码> V.Erase[V.Enter())< /Calp>是未定义的行为)。假设从您的示例中,您只期望出现一个“n”的事件,那么您可能需要考虑使用STD::SET而不是vector。在这种情况下,只需要一个语句就可以从SET“SET”(n)中删除该元素。如果你有多个事件,那么你需要一个列表或向量。假设从你的例子中你只期望出现一个“n”的事件,那么你可能需要考虑使用STD::SET代替向量。在这种情况下,你只需要一个语句就可以从SET 'SETE(n)中删除元素。当然,如果有多次出现,则需要一个列表或向量。
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