Daily bit(e) C++. std::views::slide

Добавлено 26 августа 2026 в 14:05

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

Daily bit(e) C++

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";
}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование