如何在对象向量上同时使用擦除、分区和迭代 我在自己的学习~~/p>学习C++
我有一个对象的类字段向量,我想迭代并删除不满足特定条件的对象 myVector[0]是{obj1=val 1,obj2=val 2,obj3=val 3} . . . myVector[i]是{obj1=valx,obj2=valy,obj3=valz} 我的问题是为了将值传递给谓词函数,我需要访问该索引处的对象id和值。但是我不知道如何实现它,所以我迭代/递增。 或者更具体地说,如何在每个索引处传递该键值?我请求语法帮助 大概是这样的:如何在对象向量上同时使用擦除、分区和迭代 我在自己的学习~~/p>学习C++,c++,std,C++,Std,我有一个对象的类字段向量,我想迭代并删除不满足特定条件的对象 myVector[0]是{obj1=val 1,obj2=val 2,obj3=val 3} . . . myVector[i]是{obj1=valx,obj2=valy,obj3=valz} 我的问题是为了将值传递给谓词函数,我需要访问该索引处的对象id和值。但是我不知道如何实现它,所以我迭代/递增。 或者更具体地说,如何在每个索引处传递该键值?我请求语法帮助 大概是这样的: myVector.erase(std::partitio
myVector.erase(std::partition(myVector.begin(),myVector.end(), predicate(myVector[i].obj1)),myVector.end());
显然,我没有办法这样增加i。
有没有一种不用for循环的方法可以做到这一点?我不能100%肯定我理解这个问题,因为您似乎担心向量中的索引。如果谓词需要查看索引,而不仅仅是向量中的项,这会使事情变得复杂 然而,这能解决你的问题吗
#include <algorithm>
myVector.erase(
std::remove_if(myVector.begin(), myVector.end(), myPredicate),
myVector.end());
在迭代向量时,无法从向量中删除内容。您可以将“赢家”复制到一个新的向量中,然后将旧的向量全部删除,或者记住要删除的向量的索引,然后在单独的循环中删除它们。@TimRoberts:这不是真的。有多种方法可以在删除元素时在向量上迭代。
myVector.erase(
std::remove_if(myVector.begin(), myVector.end(),
[](const auto & x) { return x.obj1 <= 0; }),
myVector.end());