Ежедневный бит (е) C++ # 127, представления «скользящего кортежа» C++ 23: std::views::adjacent и std::views::pairwise.

std::views::adjacent — это представление, похожее на std::views::slide, создающее скользящее окно по входному диапазону. Однако там, где std::views::slide создает поддиапазоны, std::views::adjacent создает кортежи ссылок на элементы.

Следовательно, элементы std::views::adjacent могут быть деконструированы с помощью структурированного связывания.

std::views::adjacent‹2› имеет псевдоним в std::views::pairwise.

#include <ranges>
#include <vector>


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

// "sliding tuple" of references to elements
for (std::tuple<int&,int&,int&> v : data | std::views::adjacent<3>) {
 // iterate over {1,2,3}, {2,3,4}, {3,4,5}
}

// deconstructed using structured binding
for (auto [first, second, third] : data | std::views::adjacent<3>) {
 // iterate over {1,2,3}, {2,3,4}, {3,4,5}
}

// std::views::adjacent<2> has an alias
for (auto [left, right] : data | std::views::pairwise) {
    // iterate over {1,2}, {2,3}, {3,4}, {4,5}
}

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