C++ c++;范围视图

C++ c++;范围视图,c++,algorithm,range,c++20,C++,Algorithm,Range,C++20,我正在寻找一个范围视图的实现,该视图惰性地创建给定范围的k个组合 例如,包含2个组合的范围{1,2,3}应返回: std::vector v {1,2,3}; auto rng = ranges::views::combinations<2>(v); for(auto[a,b] : rng) std::cout << a << ' ' << b << '\n'; // 1, 2 // 1, 3 // 2, 3 让“一切”变得懒惰

我正在寻找一个范围视图的实现,该视图惰性地创建给定范围的k个组合

例如,包含2个组合的范围
{1,2,3}
应返回:

std::vector v {1,2,3};
auto rng = ranges::views::combinations<2>(v);
for(auto[a,b] : rng)
  std::cout << a << ' ' << b << '\n';
// 1, 2
// 1, 3
// 2, 3
让“一切”变得懒惰

完全未经测试的代码

auto lazycombo = [values, comb_size]() mutable { 
  bool ok = next_combination(values.begin(), values.begin() + comb_size, values.end());
  return std::span(values.begin(), values.begin()+comb_size);
}

现在用你的

auto combinationIdx = ranges::views::generate(lazycombo);
这应该是
generate\u n
,因为无法停止
generate
,其中
n
应该是可能的组合数。
.

它必须是C++20的范围吗?如果是,可能会在你的问题中添加一个C++20标记。否则也有好的旧。ranges-v3也可以!疯狂的方法。但它是有效的!谢谢我根据您的回答更新了我的问题,并提供了有效的解决方案。非常感谢。