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

Добавлено 17 августа 2026 в 06:01

Daily bit(e) C++ 82, представление «каждый n-ый элемент» в C++23: std::views::stride.

Daily bit(e) C++

std::views::stride в C++23 – это представление, содержащее каждый n-й элемент из исходного представления.

Это полезно, когда мы хотим представить обход столбцов с помощью представлений.

#include <iostream>
#include <ranges>
#include <vector>
#include <string_view>
using namespace std::literals;

auto text = "Hello   World!"sv;

// Пройтись по каждому второму элементу:
for (auto c : text | std::views::stride(2))
    std::cout << c << " ";
std::cout << "\n";
/* Напечатает:
H l o   W r d 
*/

// То же самое, но смещенное на единицу путем удаления первого элемента:
for (auto c : text | std::views::drop(1) | std::views::stride(2))
    std::cout << " " << c;
std::cout << "\n";
/* Напечатает:
 e l     o l !
*/


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

// Обработать данные как двумерный массив 3x3
// и выполнить обход по столбцам:
for (auto column : std::views::iota(0,3)) 
{
    for (auto e : data | 
         std::views::drop(column) | std::views::stride(3))
        std::cout << e << " ";
    std::cout << "\n";
}
/* Напечатает:
1 4 7
2 5 8
3 6 9
*/

Пример на Compiler Explorer

Теги

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