Daily bit(e) C++. std::views::slide
Добавлено 26 августа 2026 в 14:05
Daily bit(e) C++ 94, представление «скользящего окна» в диапазоне: std::views::slide.

std::views::slide в C++23 представляет собой представление всех позиций скользящего окна указанного размера в обернутом диапазоне.
То есть, i-й элемент std::views::slide размером n будет поддиапазоном из [i, i+n) элементов из исходного диапазона.
Обратите внимание, что итерация по скользящим окнам, создаваемым std::views::slide, по своей природе будет O(m*n), поэтому подумайте, можно ли реализовать ваш вариант использования поэлементно за O(m).
#include <ranges>
#include <vector>
#include <iostream>
std::vector<int> data{1,2,3,4,5,6,7,8,9};
for (auto window : data | std::views::slide(4))
{
// Пройтись по всем позициям 4-элементных окон:
// {1,2,3,4}
// {2,3,4,5}
// {3,4,5,6}
// {4,5,6,7}
// {5,6,7,8}
// {6,7,8,9}
std::ranges::copy(window,
std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
