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

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
*/
