如何使用 iter::product 参数长度
How to user iter::product with parameter of length
在下面的代码中,我想获取长度为 n 的所有乘积,这是函数的一个参数。显然,该产品功能不适用于长度参数。当我给出一个整数时,代码不会报错。
我也想遍历产品中的所有元素并打印它们,但是它说它不能打印元组。
我该如何解决这个问题?
#include <../cppitertools-master/product.hpp>
vector<complex<double>> print_products(int n) {
vector<complex<double>> solutions = {};
vector<int> options = { 1, -1 };
for (auto&& combination : iter::product<n>(options)) {
for (auto&& c : combination) {
cout << c << " ";
}
cout << endl;
}
}
我在使用参数 n:
时得到的错误
no instance of overloaded function "iter::product" matches the argument list, argument types are: (std::vector<int, std::allocator<int>>)
使用 2 作为参数尝试打印组合时出现的错误:
this range-based 'for' statement requires a suitable "begin" function and none was found
iter::product<n>
要求 n
是编译时常量,但事实并非如此。
这个库有一个关于实现一个需要重复运行时计数的版本的未决问题。
元组不是可以用 for
循环的东西。 runtime-count product
的 return 值不能是元组,所以不用担心原始案例的第二个错误。
您还必须使用编译时常量索引元组。
for (auto&& combination : iter::product<2>(options)) {
std::cout << get<0>(combination) << " " << get<1>(combination) << " " << std::endl;
}
如果你模板计数,你可以使用std::index_sequence
来保存数字的编译时间序列
template <typename T, size_t... Is>
void print_product(T&& combination, std::index_sequence<Is...>) {
(std::cout << get<Is>(std::forward<T>(combination))), ...) << std::endl;
}
template <size_t N>
void print_products() {
vector<int> options = { 1, -1 };
for (auto&& combination : iter::product<N>(options)) {
print_product(combination, std::make_index_sequence<N>{});
}
}
在下面的代码中,我想获取长度为 n 的所有乘积,这是函数的一个参数。显然,该产品功能不适用于长度参数。当我给出一个整数时,代码不会报错。 我也想遍历产品中的所有元素并打印它们,但是它说它不能打印元组。
我该如何解决这个问题?
#include <../cppitertools-master/product.hpp>
vector<complex<double>> print_products(int n) {
vector<complex<double>> solutions = {};
vector<int> options = { 1, -1 };
for (auto&& combination : iter::product<n>(options)) {
for (auto&& c : combination) {
cout << c << " ";
}
cout << endl;
}
}
我在使用参数 n:
时得到的错误no instance of overloaded function "iter::product" matches the argument list, argument types are: (std::vector<int, std::allocator<int>>)
使用 2 作为参数尝试打印组合时出现的错误:
this range-based 'for' statement requires a suitable "begin" function and none was found
iter::product<n>
要求 n
是编译时常量,但事实并非如此。
这个库有一个关于实现一个需要重复运行时计数的版本的未决问题。
元组不是可以用 for
循环的东西。 runtime-count product
的 return 值不能是元组,所以不用担心原始案例的第二个错误。
您还必须使用编译时常量索引元组。
for (auto&& combination : iter::product<2>(options)) {
std::cout << get<0>(combination) << " " << get<1>(combination) << " " << std::endl;
}
如果你模板计数,你可以使用std::index_sequence
来保存数字的编译时间序列
template <typename T, size_t... Is>
void print_product(T&& combination, std::index_sequence<Is...>) {
(std::cout << get<Is>(std::forward<T>(combination))), ...) << std::endl;
}
template <size_t N>
void print_products() {
vector<int> options = { 1, -1 };
for (auto&& combination : iter::product<N>(options)) {
print_product(combination, std::make_index_sequence<N>{});
}
}