На этом шаге мы рассмотрим особенности использования аргументов в строковых операциях.
Стандартная библиотека поддерживает множество операций, предназначенных для работы со строками. В частности, операции, изменяющие содержимое строки, обычно существуют в нескольких перегруженных версиях, в которых новое значение задается одним, двумя или тремя аргументами. Во всех операциях такого рода используется схема передачи аргументов, представленная в таблице 1.
| Операция | Описание |
|---|---|
| const string& str | Вся строка str |
| const string& str, size_type idx, size_type num | He более первых num символов str, начиная с индекса idx |
| const char* str | Вся С-строка |
| const char* chars, size_type len | Первые len символов символьного массива chars |
| char c | Символ c |
| size_type num, char с | Num экземпляров символа c |
| iterator beg, iterator end | Все символы в интервале [beg,end) |
Обратите внимание: только в одноаргументной версии с передачей char* символ \0 интерпретируется как специальный символ, завершающий строку. В остальных случаях \0 не считается специальным символом.
std::string s1("nico"); // s1 инициализируется символами n, i, c, о
std::string s2("nico",5); // s2 инициализируется символами n, i, c, о, \0
std::string s3(5,'\0'); // s3 инициализируется символами \0, \0, \0, \0, \0
s1.length() // Результат равен 4
s2.length() // Результат равен 5
s3.length() // Результат равен 5
Таким образом, в общем случае строка состоит из произвольных символов. Например, в нее можно загрузить содержимое двоичного файла.
В таблице 2 приведена краткая сводка аргументов, используемых различными операциями.
| Полная строка | Часть строки | С-строка (char*) | Массив char | Отдельный символ | num символов | Интервал итераторов | |
|---|---|---|---|---|---|---|---|
| Конструкторы | Да | Да | Да | Да | - | Да | Да |
| = | Да | - | Да | - | Да | - | - |
| assign() | Да | Да | Да | Да | - | Да | Да |
| += | Да | - | Да | - | Да | - | - |
| append() | Да | Да | Да | Да | - | Да | Да |
| push_back() | - | - | - | - | Да | - | - |
| insert(), индексная версия | Да | Да | Да | Да | - | Да | - |
| insert(), итераторная версия | - | - | - | - | Да | Да | Да |
| replace (), индексная версия | Да | Да | Да | Да | Да | Да | - |
| replace (), итераторная версия | Да | - | Да | Да | - | Да | Да |
| Поисковые функции | Да | - | Да | Да | Да | - | - |
| + | Да | - | Да | - | Да | - | - |
| ==, !=, <, <=, >, >= | Да | - | Да | - | - | - | - |
| compare() | Да | Да | Да | Да | - | - | - |
На следующем шаге мы рассмотрим отсутствующие операции.