从向量中移除元素,而不移除之后的元素 来自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