47 std::vector<std::vector<T>>
combine(
size_t k);
50 void doCombine(
size_t from,
size_t k);
52 std::vector<T> origin;
53 std::vector<std::vector<T>> combinations;
54 std::vector<size_t> current;
60 if (k > origin.size())
62 throw std::runtime_error(
"k must be smaller than elements number");
67 throw std::runtime_error(
"k must be greater than zero");
80 for (
size_t i = from; i <= origin.size() - k; ++i)
85 doCombine(i + 1, k - 1);
88 for (
auto ind: current) {
89 comb.push_back(origin[ind]);
91 combinations.push_back(comb);
unsigned __int64 uint64_t