Ежедневный бит (е) C++ # 108, C++ 23 std::views::chunk

C++23 std::views::chunk — это простое представление, которое создаст представление поддиапазонов, охватывающих заданное количество элементов каждый.

Если диапазон нельзя разделить без остатка, последний поддиапазон будет содержать оставшиеся (и, следовательно, меньше) элементы.

#include <vector>
#include <ranges>


std::vector<int> data{1,2,3,4,5,6,7,8,9};

// Iterate over chunks of size 4 (and one chunk of size 1)
for (const auto& chunk : data | std::views::chunk(4)) {
    for (int v : chunk) {
        // Iterate over elements
    }
}

std::vector<int> cube(27,0);

// Can be used to iterate multi-dimensional data stored as 1D
for (const auto &slice : cube | std::views::chunk(3)) {
    for (const auto &row : slice | std::views::chunk(3)) {
        for (const auto &el : row) {
            // iterate over all elements
        }
    }
}

Откройте пример в Compiler Explorer.