Пространства имён
Варианты
Действия

std::basic_string_view

Материал из cppreference.com
< cpp‎ | string
 
 
 
std::basic_string_view
Операции
Константы
Функции, не являющиеся элементами
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Вспомогательные классы
Руководства по выводу (C++20)
 
Определено в заголовочном файле <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 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
and LegacyContiguousIterator (до C++20)
ConstexprIterator, and contiguous_iterator (начиная с C++20)

whose value_type is 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
(public функция-элемент) [править]
(C++17)
присваивает представлению
(public функция-элемент) [править]
Итераторы
возвращает итератор на начало
(public функция-элемент) [править]
(C++17)
возвращает итератор на конец
(public функция-элемент) [править]
возвращает обратный итератор на начало
(public функция-элемент) [править]
(C++17)
возвращает обратный итератор на конец
(public функция-элемент) [править]
Доступ к элементу
предоставляет доступ к указанному символу
(public функция-элемент) [править]
(C++17)
получает доступ к указанному символу с проверкой границ
(public функция-элемент) [править]
(C++17)
предоставляет доступ к первому символу
(public функция-элемент) [править]
(C++17)
предоставляет доступ к последнему символу
(public функция-элемент) [править]
(C++17)
возвращает указатель на первый символ представления
(public функция-элемент) [править]
Ёмкость
возвращает количество символов
(public функция-элемент) [править]
(C++17)
возвращает максимальное число символов
(public функция-элемент) [править]
(C++17)
проверяет, является ли представление пустым
(public функция-элемент) [править]
Модификаторы
сжимает представление, перемещая его начало вперёд
(public функция-элемент) [править]
сжимает представление, перемещая его конец назад
(public функция-элемент) [править]
(C++17)
обменивает содержимое
(public функция-элемент) [править]
Операции
(C++17)
копирует символы
(public функция-элемент) [править]
(C++17)
возвращает подстроку
(public функция-элемент) [править]
(C++17)
сравнивает два представления
(public функция-элемент) [править]
проверяет, начинается ли строковое представление с заданного префикса
(public функция-элемент) [править]
(C++20)
проверяет, заканчивается ли строковое представление заданным суффиксом
(public функция-элемент) [править]
(C++23)
проверяет, содержит ли строковое представление заданную подстроку или символ
(public функция-элемент) [править]
(C++17)
ищет символы в представлении
(public функция-элемент) [править]
(C++17)
ищет последнее вхождение подстроки
(public функция-элемент) [править]
ищет первое вхождение символов
(public функция-элемент) [править]
ищет последнее вхождение символов
(public функция-элемент) [править]
ищет первое отсутствие символов
(public функция-элемент) [править]
ищет последнее отсутствие символов
(public функция-элемент) [править]

Константы

[static] (C++17)
особое значение. Точное значение зависит от контекста
(public static константа-элемент) [править]

[править] Функции, не являющиеся элементами

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

[править] Литералы

Определены в пространстве имён std::literals::string_view_literals
Создаёт строковое представление литерала массива символов
(функция) [править]

[править] Вспомогательные классы

поддержка хэширования для строковых представлений
(специализация шаблона класса) [править]

[править] Вспомогательные шаблоны

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.

Макрос тест функциональности Значение Стандарт Комментарий
__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)
не владеющее представление непрерывной последовательности объектов
(шаблон класса) [править]
создаёт временный массив в списке инициализации, а затем ссылается на него
(шаблон класса) [править]