Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在对象向量上同时使用擦除、分区和迭代 我在自己的学习~~/p>学习C++_C++_Std - Fatal编程技术网

如何在对象向量上同时使用擦除、分区和迭代 我在自己的学习~~/p>学习C++

如何在对象向量上同时使用擦除、分区和迭代 我在自己的学习~~/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[0]是{obj1=val 1,obj2=val 2,obj3=val 3} . . . myVector[i]是{obj1=valx,obj2=valy,obj3=valz}

我的问题是为了将值传递给谓词函数,我需要访问该索引处的对象id和值。但是我不知道如何实现它,所以我迭代/递增。 或者更具体地说,如何在每个索引处传递该键值?我请求语法帮助

大概是这样的:

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