c – 根据一个向量内的值从两个向量中删除项目
发布时间:2020-12-16 10:10:38 所属栏目:百科 来源:网络整理
导读:我有两个相等长度的整数向量.假设我要删除第一个向量中NAN的所有项.显然,我使用remove_if算法.让我们说这会删除索引1,2,5处的元素.然后我想在这些索引处从第二个向量中删除项目. 最常规的C方式是什么? 解决方法 这可以通过创建一个 zip_iterator 使用Boost
我有两个相等长度的整数向量.假设我要删除第一个向量中NAN的所有项.显然,我使用remove_if算法.让我们说这会删除索引1,2,5处的元素.然后我想在这些索引处从第二个向量中删除项目.
最常规的C方式是什么? 解决方法
这可以通过创建一个
zip_iterator 使用Boost完成,然后并行迭代两个容器的迭代器元组.
首先将一对zip_iterator传递给std :: remove_if,并让谓词检查NaN的第一个向量的元素 auto result = std::remove_if(boost::make_zip_iterator(boost::make_tuple(v1.begin(),v2.begin())),boost::make_zip_iterator(boost::make_tuple(v1.end(),v2.end())),[](boost::tuple<double,int> const& elem) { return std::isnan(boost::get<0>(elem)); }); 然后使用vector :: erase删除不需要的元素. v1.erase(boost::get<0>(result.get_iterator_tuple()),v1.end()); v2.erase(boost::get<1>(result.get_iterator_tuple()),v2.end()); Live demo 使用 auto result = boost::remove_if(boost::combine(v1,v2),int> const& elem) { return std::isnan(boost::get<0>(elem)); }); Live demo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |