Я хотел бы использовать идиоматическую (std::algorithm или аналогичную) версию Scala .grouped
в C++. Это разбивает последовательность на группы размером N
, где последняя группа может быть меньше. Есть идеи?
Ссылка: https://www.scala-lang.org/api/current/scala/collection/Seq.html#grouped(size:Int):Iterator%5BC%5D
Я успешно использовал цикл с std::min
, но мне бы хотелось что-то встроенное. Это мое решение для группировки в куски по 7 (найдено здесь на SO в другом ответе):
std::vector<std::vector<uint64_t>> chunked;
std::vector<uint64_t> flat;
// group into chunks of 7
for (size_t i = 0; i < flat.size(); i += 7) {
auto last = std::min(flat.size(), i + 7);
std::vector<uint64_t> chunk =std::vector<uint64_t>(flat.begin() + i, flat.begin() + last);
chunked.emplace_back(chunk);
}
как std::min
помогает реализовать это? Было бы очень полезно, если бы вы разместили свой код, который успешно работает, и объяснили, что вы хотите изменить в нем.
@πάνταῥεῖ OP означает иметь метод, который выполняет работу в stdlib, без необходимости кодировать его самостоятельно. Чтобы дать больше контекста, Scala stdlib довольно богата, и довольно редко приходится реализовывать такой метод вручную.
Судя по ответам на этот вопрос того, что вы ищете, не существует. Справедливости ради, вопросу 10+ лет, так что, возможно, с тех пор он был добавлен.
Я думаю, что std::views::chunk (начиная с C++23) — это то, что вы ищете.
Спасибо ребята. не уверен, почему это было закрыто, но эти комментарии отвечают на мой вопрос!
std::ranges::views::chunk сделает эту работу (но доступен только "начиная с" C++23).
Как
std::min
не "встроенный"? Разработайте свой вопрос, пожалуйста.