ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4254
Скачиваний: 28
Часть IV. Стандартная библиотека языка программирования С++
436
Эти функции выполняют следующие действия:
begin
— возвращает итератор произвольного доступа, который
указывает на первый элемент последовательности символов;
end
— возвращает итератор произвольного доступа, который
указывает на элемент, следующий за последним элементом
последовательности символов;
rbegin
— возвращает обратный итератор, который указывает
на элемент, следующий за последним элементом последова-
тельности символов;
rend
— возвращает обратный итератор, который указывает на
первый элемент последовательности символов.
Примеры использования функций
begin
и
end
были приведены в
разд. 39.2.4
. Сейчас же приведем примеры использования функ-
ций
rbegin
и
rend
.
string s("aaa bbb");
string::reverse_iterator it_beg = s.rbegin(),
it_end = s.rend();
while (it_beg != it_end)
cout << *(it_beg++); // bbb aaa
39.2.7. Получение ссылки
на элемент строки
Для получения ссылки на элемент строки в шаблоне класса
basic_string
определены следующие функции:
reference at(size_type pos);
const_reference at(size_type pos) const;
Эти функции возвращают ссылку на элемент последовательно-
сти, позиция которого задана параметром
pos
. Если позиция вы-
ходит за пределы последовательности, то функции выбрасывают
исключение типа
out_of_range
. Например:
string s("aaa");
s.at(1) = 'b';
cout << s << endl; // aba
Глава 39. Работа со строками в С++ <string>
437
39.2.8. Оператор индексирования
В шаблоне класса
basic_string
перегружен оператор индексиро-
вания:
reference operator[](size_type pos);
const_reference operator[](size_type pos) const;
Эти операторы возвращают ссылку на элемент последовательно-
сти, позиция которого задана параметром
pos
. Например:
string s("aaa");
s[1] = 'b'; // s = "aba"
Если позиция выходит за пределы последовательности, то пове-
дение оператора не определено.
39.2.9. Добавление символа
в конец строки
Для добавления символа в конец строки в шаблоне класса
basic_string
определена функция
void push_back(value_type c);
В конец строки добавляется символ, заданный параметром
c
. На-
пример:
string s("aaa");
s.push_back('b'); // s = "aaab"
39.2.10. Преобразование в строку языка C
Для преобразования объекта шаблонного класса
basic_string
в строку языка C предназначена функция:
const value_type *c_str() const;
Она возвращает указатель на константную строку, содержащую
последовательность символов, управляемую объектом шаблонно-
го класса
basic_string
. Последующий вызов не константной
функции-члена шаблонного класса может сделать недействи-
тельным этот указатель.
Часть IV. Стандартная библиотека языка программирования С++
438
Например:
string s("Demo string");
cout << s.c_str() << endl; // Demo string
39.2.11. Получение адреса
первого элемента строки
Для получения адреса первого элемента последовательности
символов, управляемой шаблонным классом
basic_string
, пред-
назначена функция:
const value_type *data() const;
Например:
string s("aaa bbb");
const char* p = s.data();
while (*p != ' ')
cout << *p++; // aaa
39.2.12. Функции, работающие
с длиной строки
Для работы с длиной строки в шаблоне класса
basic_string
опре-
делены следующие функции:
size_type length() const;
size_type size() const;
size_type max_size() const;
void resize(size_type n, value_type c = value_type());
size_type capacity() const;
void reserve(size_type n = 0);
bool empty() const;
Эти функции выполняют следующие действия:
length
— возвращает длину строки в символах;
size
— также возвращает длину строки;
max_size
— возвращает максимально возможную длину строки;
Глава 39. Работа со строками в С++ <string>
439
resize
— устанавливает длину строки равной значению пара-
метра
n
. Если длина строки увеличивается, то функция
заполняет свободные элементы значениями параметра
с
.
Если длина строки уменьшается, то вызывается функция
erase(begin() + n, end())
;
capacity
— возвращает количество элементов, которые могут
храниться в строке, без перераспределения памяти;
reserve
— устанавливает емкость строки равной значению,
которое не меньше значения параметра
n
;
empty
— возвращает
true
, если строка пустая.
Например:
string s("Demo string");
cout << s.length() << endl; // 11
39.2.13. Соединение строк
Для присоединения к строке другой строки в шаблоне класса
basic_string
перегружен оператор
+=
:
basic_string& operator+=(const basic_string& rhs);
basic_string& operator+=(const value_type *s);
basic_string& operator+=(value_type c);
Параметром этого оператора может быть объект типа
basic_string
, строка языка программирования С или просто сим-
вол. Например:
string d("This");
string s(" string");
d += " is ";
d += 'a';
d += s;
cout << d << endl; // This is a string
Для присоединения к строке другой строки в шаблоне класса
basic_string
также перегружены функции
append
:
Часть IV. Стандартная библиотека языка программирования С++
440
basic_string& append(const basic_string& str);
basic_string& append(
const basic_string& str, size_type pos, size_type n);
basic_string& append(const value_type *s, size_type n);
basic_string& append(const value_type *s);
basic_string& append(size_type n, value_type c);
template<class InIt> basic_string& append(
InIt first, InIt last);
Эти функции обеспечивают более широкие возможности при со-
единении строк, чем оператор
+=
. Все функции
append
возвраща-
ют модифицированную строку.
Параметры функций
append
имеют следующее назначение:
pos
— задает позицию символа в присоединяемой строке, на-
чиная с которого выполняется присоединение;
n
— задает количество присоединяемых символов.
Остальные параметры задают строку или символы, которые при-
соединяются к исходной строке. Например:
string s;
string t("a string");
s.append(t); // a string
s.append(t, 1, 4); // a string str
s.append(" - "); // a string str -
s.append("yes or no", 3); // a string str - yes
s.append(3, '!'); // a string str – yes!!!
Параметры шаблонной функции
append
являются итераторами
строки типа
basic_string
и задают в этой строке подстроку
[first, last)
, которая присоединяется к исходной строке. На-
пример:
string s("ab");
string t("-c-");
string::iterator it_beg = t.begin(), it_end = t.end();
s.append(it_beg + 1, it_end - 1); // s = "abc"