Spec-Zone.ru › C++

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, где первый элемент последовательности находится в позиции ноль.

Любая специализация std::basic_string_view является типом TriviallyCopyable.

(с 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,
и LegacyContiguousIterator (до C++20)
ConstexprIterator, и 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.

Члены-функции

Конструкторы и присваивание
(конструктор)
строит basic_string_view
(публичный член-функция)
operator=
присваивает представление
(публичный член-функция)
Итераторы
begincbegin
возвращает итератор к началу
(публичный член-функция)
endcend
возвращает итератор к концу
(публичный член-функция)
rbegincrbegin
возвращает обратный итератор к началу
(публичный член-функция)
rendcrend
возвращает обратный итератор к концу
(публичный член-функция)
Доступ к элементам
operator[]
получает указанный символ
(публичный член-функция)
at
получает указанный символ с проверкой границ
(публичный член-функция)
front
получает первый символ
(публичный член-функция)
back
получает последний символ
(публичный член-функция)
data
возвращает указатель на первый символ представления
(публичный член-функция)
Ёмкость
sizelength
возвращает количество символов
(публичный член-функция)
max_size
возвращает максимальное количество символов
(публичный член-функция)
empty
проверяет, является ли представление пустым
(публичный член-функция)
Модификаторы
remove_prefix
уменьшает представление, сдвигая его начало вперёд
(публичный член-функция)
remove_suffix
уменьшает представление, сдвигая его конец назад
(публичный член-функция)
swap
меняет содержимое местами
(публичный член-функция)
Операции
copy
копирует символы
(публичный член-функция)
substr
возвращает подстроку
(публичный член-функция)
compare
сравнивает два представления
(публичный член-функция)
starts_with
(C++20)
проверяет, начинается ли строковое представление с заданного префикса
(публичный член-функция)
ends_with
(C++20)
проверяет, заканчивается ли строковое представление заданным суффиксом
(публичный член-функция)
contains
(C++23)
проверяет, содержит ли строковое представление заданную подстроку или символ
(публичный член-функция)
find
поиск символов в представлении
(публичный член-функция)
rfind
поиск последнего вхождения подстроки
(публичный член-функция)
find_first_of
поиск первого вхождения символов
(публичный член-функция)
find_last_of
поиск последнего вхождения символов
(публичный член-функция)
find_first_not_of
поиск первого отсутствия символов
(публичный член-функция)
find_last_not_of
поиск последнего отсутствия символов
(публичный член-функция)

Константы

npos
[статический]
специальное значение. Точный смысл зависит от контекста
(публичная статическая константа члена)

Нечленённые функции

operator==operator!=operator<operator>operator<=operator>=operator<=>
(C++17)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20)
лексикографически сравнивает два строковых представления
(шаблон функции)
Ввод/вывод
operator<<
(C++17)
выполняет вывод в поток строковых представлений
(шаблон функции)

Литералы

Определено в встроенном пространстве имён std::literals::string_view_literals
operator""sv
(C++17)
создаёт представление строки из литерала массива символов
(функция)

Вспомогательные классы

std::hash<std::string_view>std::hash<std::wstring_view>std::hash<std::u8string_view>std::hash<std::u16string_view>std::hash<std::u32string_view>
(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';
    }
}

Вывод:

▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─

См. также

basic_string
хранит и обрабатывает последовательности символов
(шаблон класса)
span
(C++20)
невладеющее представление непрерывной последовательности объектов
(шаблон класса)
initializer_list
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API