传入一个迭代器,该迭代器只迭代满足特定条件的元素

Pass in an iterator that iterates only elements satisfying certain conditions

本文关键字:迭代器 迭代 满足 特定条件 元素 一个      更新时间:2023-10-16

在C++中,是否可以传递一个只迭代满足某些条件的元素的迭代器?虽然可以编写自己的迭代器类,但我想知道是否存在标准的库解决方案。例如,std::discrete_distribution的构造函数接受两个迭代器(begin和end)的输入。现在我需要做以下操作:

std::vector<int> x = {1, 2, 3, 4, 5};
std::vector<int> y;
std::copy_if(x.begin(), x.end(), std::back_inserter(y), my_condition);
std::discrete_distribution dd(y.begin(), y.end());

但这需要复制y的元素两次。我更喜欢下面这样的东西:

std::vector<int> x = {1, 2, 3, 4, 5};
std::discrete_distribution dd(std::condition_iter(x.begin(), my_condition), x.end());

C++中既没有特殊的语法,也没有标准的库功能可以解决您的问题。然而,有一个名为"range-v3"的库可能会有所帮助。以下是几个链接:
https://github.com/ericniebler/range-v3
https://ericniebler.github.io/range-v3/
寻找view::remove_if-我认为这正是您所需要的。这将在不修改任何内容的情况下动态过滤容器。