std::basic_string_view
Определено в заголовочном файле <string_view> | ||
|---|---|---|
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_string_view;
| (с C++17) |
Шаблон класса basic_string_view описывает объект, который может ссылаться на постоянную непрерывную последовательность CharT, где первый элемент последовательности находится в позиции ноль.
| Любая специализация | (с C++23) |
Типичная реализация содержит только два члена: указатель на постоянную CharT и размер.
Предоставлены несколько определений типов для распространённых типов символов:
Определено в заголовочном файле <string_view> |
|
|---|---|
| Тип | Определение |
std::string_view (C++17) | std::basic_string_view<char> |
std::wstring_view (C++17) | std::basic_string_view<wchar_t> |
std::u8string_view (C++20) | std::basic_string_view<char8_t> |
std::u16string_view (C++17) | std::basic_string_view<char16_t> |
std::u32string_view (C++17) | 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,
который |
||||
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.
Члены-функции
Конструкторы и присваивание |
|
строит basic_string_view (публичный член-функция) |
|
| присваивает представление (публичный член-функция) |
|
Итераторы |
|
| возвращает итератор к началу (публичный член-функция) |
|
| возвращает итератор к концу (публичный член-функция) |
|
| возвращает обратный итератор к началу (публичный член-функция) |
|
| возвращает обратный итератор к концу (публичный член-функция) |
|
Доступ к элементам |
|
| получает указанный символ (публичный член-функция) |
|
| получает указанный символ с проверкой границ (публичный член-функция) |
|
| получает первый символ (публичный член-функция) |
|
| получает последний символ (публичный член-функция) |
|
| возвращает указатель на первый символ представления (публичный член-функция) |
|
Ёмкость |
|
| возвращает количество символов (публичный член-функция) |
|
| возвращает максимальное количество символов (публичный член-функция) |
|
| проверяет, является ли представление пустым (публичный член-функция) |
|
Модификаторы |
|
| уменьшает представление, сдвигая его начало вперёд (публичный член-функция) |
|
| уменьшает представление, сдвигая его конец назад (публичный член-функция) |
|
| меняет содержимое местами (публичный член-функция) |
|
Операции |
|
| копирует символы (публичный член-функция) |
|
| возвращает подстроку (публичный член-функция) |
|
| сравнивает два представления (публичный член-функция) |
|
|
(C++20) | проверяет, начинается ли строковое представление с заданного префикса (публичный член-функция) |
|
(C++20) | проверяет, заканчивается ли строковое представление заданным суффиксом (публичный член-функция) |
|
(C++23) | проверяет, содержит ли строковое представление заданную подстроку или символ (публичный член-функция) |
| поиск символов в представлении (публичный член-функция) |
|
| поиск последнего вхождения подстроки (публичный член-функция) |
|
| поиск первого вхождения символов (публичный член-функция) |
|
| поиск последнего вхождения символов (публичный член-функция) |
|
| поиск первого отсутствия символов (публичный член-функция) |
|
| поиск последнего отсутствия символов (публичный член-функция) |
|
Константы |
|
|
[статический] | специальное значение. Точный смысл зависит от контекста (публичная статическая константа члена) |
Нечленённые функции
|
(C++17)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20) | лексикографически сравнивает два строковых представления (шаблон функции) |
Ввод/вывод |
|
|
(C++17) | выполняет вывод в поток строковых представлений (шаблон функции) |
Литералы
Определено в встроенном пространстве имён std::literals::string_view_literals |
|
|---|---|
|
(C++17) | создаёт представление строки из литерала массива символов (функция) |
Вспомогательные классы
|
(C++17)(C++17)(C++20)(C++17)(C++17) | поддержка хэширования для представлений строк (специализация шаблона класса) |
Вспомогательные шаблоны
template< class CharT, class Traits >
inline constexpr bool
ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true;
| (с C++20) |
Эта специализация 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) |
Эта специализация ranges::enable_view обеспечивает, что basic_string_view удовлетворяет требованиям view.
Руководства по выводу типов | (с C++20) |
Примечания
Программа должна гарантировать, что std::string_view не будет существовать дольше, чем указанный массив символов:
std::string_view good{"a string literal"};
// "Good" case: `good` points to a static array.
// String literals reside in persistent data storage.
std::string_view bad{"a temporary string"s};
// "Bad" case: `bad` holds a dangling pointer since the std::string temporary,
// created by std::operator""s, will be destroyed at the end of the statement.Специализации 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';
}
}Вывод:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
См. также
| хранит и обрабатывает последовательности символов (шаблон класса) |
|
|
(C++20) | невладеющее представление непрерывной последовательности объектов (шаблон класса) |
|
(C++11) | создаёт временный массив при инициализации списком, а затем ссылается на него (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string_view