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
|
LegacyRandomAccessIterator для value_type
| ||||
const_iterator
|
LegacyRandomAccessIterator для const value_type
| ||||
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)
[править] Пример
#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) |
строковое представление только для чтения (шаблон класса) |