>string
Строка (string) — это последовательность символов переменной длины. Чтобы использовать тип >string
, необходимо включить в код заголовок >string
. Поскольку тип >string
принадлежит библиотеке, он определен в пространстве имен >std
. Наши примеры подразумевают наличие следующего кода:
>#include
>using std::string;
В этом разделе описаны наиболее распространенные операции со строками; а дополнительные операции рассматриваются в разделе 9.5.
Каждый класс определяет, как могут быть инициализированы объекты его типа. Класс может определить много разных способов инициализации объектов своего типа. Каждый из способов отличается либо количеством предоставляемых инициализаторов, либо типами этих инициализаторов. Список наиболее распространенных способов инициализации строк приведен в табл. 3.1, а некоторые из примеров приведены ниже.
>string s1; // инициализация по умолчанию; s1 - пустая строка
>string s2 = s1; // s2 - копия s1
>string s3 = "hiya"; // s3 - копия строкового литерала
>string s4(10, 'c'); // s4 - cccccccccc
Инициализация строки по умолчанию (см. раздел 2.2.1) создает пустую строку; т.е. объект класса >string
без символов. Когда предоставляется строковый литерал (см. раздел 2.1.3), во вновь созданную строку копируются символы этого литерала, исключая завершающий нулевой символ. При предоставлении количества и символа строка содержит указанное количество экземпляров данного символа.
Таблица 3.1. Способы инициализации объекта класса >string
>string s1 | Инициализация по умолчанию; >s1 — пустая строка |
>string s2(s1) | >s2 — копия >s1 |
>string s2 = s1 | Эквивалент >s2(s1) , >s2 — копия >s1 |
>string s3("value") | >s3 — копия строкового литерала, нулевой символ не включен |
>string s3 = "value" | Эквивалент >s3("value") , >s3 — копия строкового литерала |
>string s4(n, 'c') | Инициализация переменной >s4 символом >'c' в количестве >n штук |
В разделе 2.2.1 упоминалось, что язык С++ поддерживает несколько разных форм инициализации. Давайте на примере класса >string
начнем изучать, чем эти формы отличаются друг от друга. Когда переменная инициализируется с использованием знака >=
, компилятор просят скопировать инициализирующий объект в создаваемый объект, т.е. выполнить инициализацию копией (copy initialization). В противном случае без знака >=
осуществляется прямая инициализация (direct initialization).
Когда имеется одиночный инициализатор, можно использовать и прямую форму, и инициализацию копией. Но при инициализации переменной несколькими значениями, как при инициализации переменной >s4
выше, следует использовать прямую форму инициализации.
>string s5 = "hiya"; // инициализация копией
>string s6("hiya"); // прямая инициализация
>string s7(10, 'c'); // прямая инициализация; s7 - сссссссссс
Если необходимо использовать несколько значений, можно применить косвенную форму инициализации копией при явном создании временного объекта для копирования.