std::basic_string_view
| Определено в заголовочном файле <string_view>
|
||
| template< class CharT, |
(начиная с C++17) | |
Шаблон класса basic_string_view описывает объект, который может ссылаться на постоянную непрерывную последовательность char подобных объектов с первым элементом последовательности в нулевой позиции.
|
Каждая специализация |
(начиная с C++23) |
Типичная реализация содержит только два элемента: указатель на константу CharT и размер.
Предусмотрено несколько определений типов для общих типов символов:
| Определены в заголовочном файле
<string_view> | |
| Тип | Определение |
| std::string_view | std::basic_string_view<char> |
| std::wstring_view | std::basic_string_view<wchar_t> |
| std::u8string_view (C++20) | std::basic_string_view<char8_t> |
| std::u16string_view | std::basic_string_view<char16_t> |
| std::u32string_view | std::basic_string_view<char32_t> |
Содержание |
[править] Параметры шаблона
| CharT | — | тип символа |
| Traits | — | класс CharTraits определяет операции с типом символа. Как и для basic_string, Traits::char_type должен именовать тот же тип, что и CharT, иначе программа некорректна.
|
[править] Типы элементы
| Тип элемент | Определение |
traits_type
|
Traits
|
value_type
|
CharT
|
pointer
|
CharT*
|
const_pointer
|
const CharT*
|
reference
|
CharT&
|
const_reference
|
const CharT&
|
const_iterator
|
определяемые реализацией константы LegacyRandomAccessIterator, ConstexprIterator (начиная с C++20) и LegacyContiguousIterator (до C++20)contiguous_iterator (начиная с C++20), для которых value_type равно CharT
|
iterator
|
const_iterator
|
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
reverse_iterator
|
const_reverse_iterator
|
size_type
|
std::size_t |
difference_type
|
std::ptrdiff_t |
Примечание: iterator и const_iterator относятся к одному и тому же типу, поскольку строковые представления являются представлениями постоянных последовательностей символов.
Все требования к типам итераторов для Container применяются также к типам iterator и const_iterator для basic_string_view.
[править] Функции-элементы
Конструкторы и присваивания | |
| (C++17) |
конструирует basic_string_view (public функция-элемент) |
| (C++17) |
присваивает представлению (public функция-элемент) |
Итераторы | |
| (C++17) |
возвращает итератор на начало (public функция-элемент) |
| (C++17) |
возвращает итератор на конец (public функция-элемент) |
| (C++17) |
возвращает обратный итератор на начало (public функция-элемент) |
| (C++17) |
возвращает обратный итератор на конец (public функция-элемент) |
Доступ к элементу | |
| (C++17) |
предоставляет доступ к указанному символу (public функция-элемент) |
| (C++17) |
получает доступ к указанному символу с проверкой границ (public функция-элемент) |
| (C++17) |
предоставляет доступ к первому символу (public функция-элемент) |
| (C++17) |
предоставляет доступ к последнему символу (public функция-элемент) |
| (C++17) |
возвращает указатель на первый символ представления (public функция-элемент) |
Ёмкость | |
| (C++17) |
возвращает количество символов (public функция-элемент) |
| (C++17) |
возвращает максимальное число символов (public функция-элемент) |
| (C++17) |
проверяет, является ли представление пустым (public функция-элемент) |
Модификаторы | |
| (C++17) |
сжимает представление, перемещая его начало вперёд (public функция-элемент) |
| (C++17) |
сжимает представление, перемещая его конец назад (public функция-элемент) |
| (C++17) |
обменивает содержимое (public функция-элемент) |
Операции | |
| (C++17) |
копирует символы (public функция-элемент) |
| (C++17) |
возвращает подстроку (public функция-элемент) |
| (C++17) |
сравнивает два представления (public функция-элемент) |
| (C++20) |
проверяет, начинается ли строковое представление с заданного префикса (public функция-элемент) |
| (C++20) |
проверяет, заканчивается ли строковое представление заданным суффиксом (public функция-элемент) |
| (C++23) |
проверяет, содержит ли строковое представление заданную подстроку или символ (public функция-элемент) |
| (C++17) |
ищет символы в представлении (public функция-элемент) |
| (C++17) |
ищет последнее вхождение подстроки (public функция-элемент) |
| (C++17) |
ищет первое вхождение символов (public функция-элемент) |
| (C++17) |
ищет последнее вхождение символов (public функция-элемент) |
| (C++17) |
ищет первое отсутствие символов (public функция-элемент) |
| (C++17) |
ищет последнее отсутствие символов (public функция-элемент) |
Константы | |
| [static] (C++17) |
особое значение. Точное значение зависит от контекста (public static константа-элемент) |
[править] Функции, не являющиеся элементами
| (C++17) (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (C++20) |
лексикографически сравнивает два строковых представления (шаблон функции) |
Ввод/вывод | |
| (C++17) |
выполняет потоковый вывод строковых представлений (шаблон функции) |
[править] Литералы
| Определены в пространстве имён
std::literals::string_view_literals | |
| (C++17) |
Создаёт строковое представление литерала массива символов (функция) |
[править] Вспомогательные классы
| хеш-поддержка для строковых представлений (специализация шаблона класса) | |
[править] Вспомогательные шаблоны
| template<class CharT, class Traits> inline constexpr bool ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true; |
(начиная с C++20) | |
Эта специализация std::ranges::enable_borrowed_range заставляет basic_string_view соответствовать borrowed_range.
| template<class CharT, class Traits> inline constexpr bool ranges::enable_view<std::basic_string_view<CharT, Traits>> = true; |
(начиная с C++20) | |
Эта специализация std::ranges::enable_view делает basic_string_view соответствующей view.
[править] Руководства по выводу (начиная с C++20)
[править] Примечания
Ответственность за то, чтобы std::string_view не пережил указанный им массив символов, является обязанностью программиста:
std::string_view good {"строковый литерал"}; // "Хороший" случай: `good` указывает на статический массив (строковые литералы // обычно находятся в постоянных сегментах данных). std::string_view bad {"временная строка"s}; // "Плохой" случай: `bad` содержит висящий указатель, поскольку временный std::string, // созданный std::operator""s, будет уничтожен в конце оператора.
Специализации std::basic_string_view уже являются тривиально копируемыми типами во всех существующих реализациях, даже до формального требования, введённого в C++23.
[править] Пример
Возможный вывод:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
[править] Смотрите также
| хранит и управляет последовательностями символов (шаблон класса) | |
| (C++20) |
не владеющее представление непрерывной последовательности объектов (шаблон класса) |
| (C++11) |
создаёт временный массив в списке инициализации, а затем ссылается на него (шаблон класса) |