std::span<T,Extent>::subspan
template< std::size_t Offset,
std::size_t Count = std::dynamic_extent >
constexpr std::span<element_type, /* see below */>
subspan() const;
| (1) | (начиная с C++20) |
constexpr std::span<element_type, std::dynamic_extent>
subspan( size_type offset,
size_type count = std::dynamic_extent ) const;
| (2) | (начиная с C++20) |
Получает поддиапазон из нескольких последовательных элементов этого диапазона; включаемые элементы определяются количеством элементов и смещением.
1) Количество элементов и смещение задаются в качестве аргументов шаблона, и поддиапазон имеет динамический размер только в том случае, если иCount, и Extent являются std::dynamic_extent. - Если
Countявляетсяstd::dynamic_extent, поддиапазон содержит все элементы, начиная сOffset-го. - В противном случае поддиапазон содержит
Countэлементов, начиная сOffset-го.
FinalExtent; он определяется как Count != std::dynamic_extent
? Count
: (Extent != std::dynamic_extent
? Extent - Offset
: std::dynamic_extent)
Offset <= Extent && (Count == std::dynamic_extent || Count <= Extent - Offset) является false, программа некорректна.| Если | (до C++26) |
| Если
| (начиная с C++26) |
- Если
countявляетсяstd::dynamic_extent, поддиапазон содержит все элементы, начиная сoffset-го. - В противном случае поддиапазон содержит
countэлементов, начиная сoffset-го.
| Если | (до C++26) |
| Если
| (начиная с C++26) |
Возвращаемое значение
std::span<element_type, FinalExtent>
(data() + Offset, Count != std::dynamic_extent ? Count : size() - Offset))
std::span<element_type, std::dynamic_extent>
(data() + offset, count != std::dynamic_extent ? count : size() - offset))
Пример
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <ranges>
#include <span>
void put_char(char c)
{
std::putchar(c);
}
void display(std::span<const char> abc)
{
const auto columns{20U};
const auto rows{abc.size() - columns + 1};
for (auto offset{0U}; offset < rows; ++offset)
{
std::ranges::for_each(abc.subspan(offset, columns), put_char);
std::puts("");
}
}
int main()
{
char abc[26];
std::ranges::iota(abc, 'A');
display(abc);
}
Вывод:
ABCDEFGHIJKLMNOPQRST BCDEFGHIJKLMNOPQRSTU CDEFGHIJKLMNOPQRSTUV DEFGHIJKLMNOPQRSTUVW EFGHIJKLMNOPQRSTUVWX FGHIJKLMNOPQRSTUVWXY GHIJKLMNOPQRSTUVWXYZ
См. также
получает поддиапазон, состоящий из первых N элементов последовательности (открытая функция-член) |
|
получает поддиапазон, состоящий из последних N элементов последовательности (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/span/subspan