首页 文章

传入一个只迭代满足某些条件的元素的迭代器

提问于
浏览
1

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

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

1 回答

  • 2

    C中既没有特殊语法也没有标准库功能可以解决您的问题 . 但是,有一个名为"range-v3"的库可能有所帮助 . 这里有几个链接:
    https://github.com/ericniebler/range-v3
    https://ericniebler.github.io/range-v3/
    寻找 view::remove_if - 我想这就是你需要的 . 这将在不实际修改任何内容的情况下即时过滤容器 .

相关问题