gpt4 book ai didi

c++ - 根据一个 vector 中的值从两个 vector 中删除项目

转载 作者:太空狗 更新时间:2023-10-29 19:48:22 24 4
gpt4 key购买 nike

我有两个等长的整数 vector 。假设我想删除第一个 vector 中的所有 NAN 项。显然,我使用了 remove_if 算法。假设这会删除索引 1、2、5 处的元素。然后我想从这些索引处的第二个 vector 中删除项目。

执行此操作的最规范的 C++ 方法是什么?

最佳答案

这可以通过创建 zip_iterator 使用 Boost 来完成然后并行地迭代两个容器中迭代器的元组

首先将一对 zip_iterators 传递给 std::remove_if,并让谓词检查第一个 vector 的元素是否为 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


创建压缩迭代器范围所需的样板可以通过使用 boost::combine 进一步减少和 Boost.Range 版本的 remove_if .

auto result = boost::remove_if(boost::combine(v1, v2),
[](boost::tuple<double, int> const& elem) {
return std::isnan(boost::get<0>(elem));
});

Live demo

关于c++ - 根据一个 vector 中的值从两个 vector 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com