std::basic_string_view — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
|
|
(начиная с C++17) | |
Шаблон класса basic_string_view описывает объект, который может ссылаться на постоянную непрерывную последовательность CharT с первым элементом последовательности в нулевой позиции.
|
Каждая специализация |
(начиная с C++23) |
Типичная реализация содержит только два элемента: указатель на константу CharT и размер.
Предусмотрено несколько определений типов для общих типов символов:
Определены в заголовочном файле | |
| Тип | Определение |
| 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 определяет операции с типом символа. Как и для std::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
whose |
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 константа-элемент) [править] |
Функции, не являющиеся элементами
Литералы
Вспомогательные классы
Вспомогательные шаблоны
<tbody> </tbody>
|
|
(начиная с C++20) | |
Эта специализация std::ranges::enable_borrowed_range заставляет basic_string_view соответствовать borrowed_range.
<tbody> </tbody>
|
|
(начиная с 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.
| Макрос тест функциональности | Значение | Стандарт | Комментарий |
|---|---|---|---|
__cpp_lib_string_view |
201606L |
(C++17) | std::string_view
|
201803L |
(C++20) | ConstexprIterator | |
__cpp_lib_string_contains |
202011L |
(C++23) | contains
|
Пример
#include <iostream> #include <string_view> int main() { constexpr std::string_view unicode[] { "▀▄─", "▄▀─", "▀─▄", "▄─▀" }; for (int y{}, p{}; y != 6; ++y, p = ((p + 1) % 4)) { for (int x{}; x != 16; ++x) std::cout << unicode[p]; std::cout << '\n'; } }
Вывод:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─