std::basic_string
| Определено в заголовочном файле <string>
|
||
| template< class CharT, |
(1) | |
| namespace pmr { template <class CharT, class Traits = std::char_traits<CharT>> |
(2) | (начиная с C++17) |
Шаблон класса basic_string хранит и управляет последовательностями char-подобных объектов, которые не являются объектами массива тривиального типа стандартной компоновки. Класс не зависит ни от типа символа, ни от характера операций с этим типом. Определения операций предоставляются через параметр шаблона Traits - специализацию std::char_traits или совместимого класса свойств. Traits::char_type и CharT должны именовать один и тот же тип; иначе программа будет некорректной.
Элементы basic_string хранятся непрерывно, то есть для basic_string s, &*(s.begin() + n) == &*s.begin() + n для любого n в [0, s.size()), или, что то же самое, указатель на s[0] может быть передан функциям, которые ожидают указатель на первый элемент массива CharT[] с завершающим нулём (начиная с C++11).
std::basic_string удовлетворяет требованиям AllocatorAwareContainer, SequenceContainer и ContiguousContainer (начиная с C++17)
|
Функции-элементы Однако объекты |
(начиная с C++20) |
Предусмотрено несколько определений типов для общих типов символов:
| Определены в заголовочном файле
<string> | |
| Тип | Определение |
| std::string | std::basic_string<char> |
| std::wstring | std::basic_string<wchar_t> |
| std::u8string (C++20) | std::basic_string<char8_t> |
| std::u16string (C++11) | std::basic_string<char16_t> |
| std::u32string (C++11) | std::basic_string<char32_t> |
| std::pmr::string (C++17) | std::pmr::basic_string<char> |
| std::pmr::wstring (C++17) | std::pmr::basic_string<wchar_t> |
| std::pmr::u8string (C++20) | std::pmr::basic_string<char8_t> |
| std::pmr::u16string (C++17) | std::pmr::basic_string<char16_t> |
| std::pmr::u32string (C++17) | std::pmr::basic_string<char32_t> |
Содержание |
[править] Параметры шаблона
| CharT | — | тип символа |
| Traits | — | класс свойств, определяющий операции с типом символа |
| Allocator | — | тип Allocator, используемый для выделения внутренней памяти |
[править] Типы элементов
| Тип элемента | Определение | ||||
traits_type
|
Traits
| ||||
value_type
|
CharT
| ||||
allocator_type
|
Allocator
| ||||
size_type
|
| ||||
difference_type
|
| ||||
reference
|
value_type& | ||||
const_reference
|
const value_type& | ||||
pointer
|
| ||||
const_pointer
|
| ||||
iterator
|
| ||||
const_iterator
|
| ||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> | ||||
[править] Функции элементы
создаёт basic_string (public функция-элемент) | |
| (деструктор) |
уничтожает строку, освобождая внутреннюю память, если используется (public функция-элемент) |
| присваивает значения строке (public функция-элемент) | |
| присваивает символы строке (public функция-элемент) | |
| возвращает связанный аллокатор (public функция-элемент) | |
Доступ к элементам | |
| обращается к указанному символу с проверкой границ (public функция-элемент) | |
| получает доступ к указанному символу (public функция-элемент) | |
| (C++11) |
обращается к первому символу (public функция-элемент) |
| (C++11) |
получает доступ к последнему символу (public функция-элемент) |
| возвращает указатель на первый символ строки (public функция-элемент) | |
| возвращает немодифицируемую стандартную версию массива символов C строки (public функция-элемент) | |
| (C++17) |
возвращает неизменяемый string_view всей строки (public функция-элемент) |
Итераторы | |
| (C++11) |
возвращает итератор на начало (public функция-элемент) |
| (C++11) |
возвращает итератор на конец (public функция-элемент) |
| (C++11) |
возвращает обратный итератор на начало (public функция-элемент) |
| (C++11) |
возвращает обратный итератор на конец (public функция-элемент) |
Вместимость | |
| проверяет, пуста ли строка (public функция-элемент) | |
| возвращает количество символов (public функция-элемент) | |
| возвращает максимальное количество символов (public функция-элемент) | |
| резервирует память (public функция-элемент) | |
| возвращает количество символов, которые могут храниться в выделенной в данный момент памяти (public функция-элемент) | |
| (C++11) |
уменьшает использование памяти за счёт освобождения неиспользуемой памяти (public функция-элемент) |
Операции | |
| очищает содержимое (public функция-элемент) | |
| вставляет символы (public функция-элемент) | |
| удаляет символы (public функция-элемент) | |
| добавляет символ в конец (public функция-элемент) | |
| (C++11) |
удаляет последний символ (public функция-элемент) |
| добавляет символы в конец (public функция-элемент) | |
| добавляет символы в конец (public функция-элемент) | |
| сравнивает две строки (public функция-элемент) | |
| (C++20) |
проверяет, начинается ли строка с заданного префикса (public функция-элемент) |
| (C++20) |
проверяет, заканчивается ли строка заданным суффиксом (public функция-элемент) |
| (C++23) |
проверяет, содержит ли строка данную подстроку или символ (public функция-элемент) |
| заменяет указанную часть строки (public функция-элемент) | |
| возвращает подстроку (public функция-элемент) | |
| копирует символы (public функция-элемент) | |
| изменяет количество сохранённых символов (public функция-элемент) | |
| меняет местами содержимое (public функция-элемент) | |
Поиск | |
| ищет символы в строке (public функция-элемент) | |
| ищет последнее вхождение подстроки (public функция-элемент) | |
| ищет первое вхождение символов (public функция-элемент) | |
| ищет первое отсутствие символов (public функция-элемент) | |
| ищет последнее вхождение символов (public функция-элемент) | |
| ищет последнее отсутствие символов (public функция-элемент) | |
Константы | |
| [static] |
специальное значение. Точное значение зависит от контекста (public static константа-элемент) |
[править] Функции, не являющиеся элементами
| объединяет две строки или строку и символ (шаблон функции) | |
| (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (C++20) |
лексикографически сравнивает две строки (шаблон функции) |
| специализация алгоритма std::swap (шаблон функции) | |
| удаляет все элементы, удовлетворяющие определённым критериям (шаблон функции) | |
Ввод/вывод | |
| выполняет потоковый ввод и вывод для строк (шаблон функции) | |
| считывает данные из потока ввода-вывода в строку (шаблон функции) | |
Числовые преобразования | |
| (C++11) (C++11) (C++11) |
преобразует строку в целое число со знаком (функция) |
| (C++11) (C++11) |
преобразует строку в целое число без знака (функция) |
| (C++11) (C++11) (C++11) |
преобразует строку в значение с плавающей запятой (функция) |
| (C++11) |
преобразует целое значение или значение с плавающей запятой в string (функция) |
| (C++11) |
преобразует целое значение или значение с плавающей запятой в wstring (функция) |
[править] Литералы
| Определены в пространстве имён
std::literals::string_literals | |
| (C++14) |
Преобразует литерал символьного массива в basic_string (функция) |
[править] Вспомогательные классы
| (C++11) (C++20) (C++11) (C++11) (C++11) (C++17) (C++20) (C++17) (C++17) (C++17) |
хеш-поддержка строк (специализация шаблона класса) |
[править] Принципы вывода (начиная с C++17)
[править] Примечание
Хотя до C++23 требуется, чтобы настраиваемые construct или destroy использовались при создании или уничтожении элементов std::basic_string, все реализации использовали только механизм по умолчанию. Требование исправлено P1072R10, чтобы соответствовать существующей практике.
| Макрос тест функциональности | Значение | Стандарт | Комментарий |
|---|---|---|---|
__cpp_lib_string_udls |
201304L | (C++14) | Определяемые пользователем литералы для строковых типов |
__cpp_lib_string_contains |
202011L | (C++23) | contains
|
__cpp_lib_string_resize_and_overwrite |
202110L | (C++23) | resize_and_overwrite
|
[править] Пример
#include <iostream> #include <string> int main() { using namespace std::literals; // Создание строки из const char* std::string str1 = "привет"; // Создание строки с использованием строкового литерала auto str2 = "мир"s; // Объединение строк std::string str3 = str1 + " " + str2; // Вывод результата std::cout << str3 << '\n'; std::string::size_type pos = str3.find(" "); str1 = str3.substr(pos + 1); // часть после пробела str2 = str3.substr(0, pos); // часть до пробела std::cout << str1 << ' ' << str2 << '\n'; // Доступ к элементу с помощью индексации через operator[] std::cout << str1[0] << '\n'; str1[0] = 'М'; std::cout << str1 << '\n'; }
Вывод:
привет мир мир привет м Мир
[править] Смотрите также
| (C++17) |
строковое представление только для чтения (шаблон класса) |