Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4109

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Часть 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 


background image

Глава 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

.  Последующий  вызов  не  константной 

функции-члена  шаблонного  класса  может  сделать  недействи-
тельным этот указатель.  


background image

Часть 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

 — возвращает максимально возможную длину строки; 


background image

Глава 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


background image

Часть 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" 


Смотрите также файлы