Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

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

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

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

Добавлен: 13.12.2020

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

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

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

Глава 39. Работа со строками в С++ <string> 

431 

39.2.1. Ассоциированные типы 

В  шаблоне  класса 

basic_string

  определены  следующие  типы, 

определяемые параметрами шаблона класса: 

  typedef T traits_type; 
  typedef A allocator_type; 

Кроме  того,  в шаблоне  класса 

basic_string

  определены  следую-

щие  типы,  значение  которых  зависит  от  реализации  шаблона 
класса: 

  typedef T0 iterator; 
  typedef T1 const_iterator; 
  typedef T2 size_type; 
  typedef T3 difference_type; 
  typedef reverse_iterator<iterator> reverse_iterator; 
  typedef reverse_iterator<const_iterator> 
    const_reverse_iterator; 
  typedef typename allocator_type::pointer pointer; 
  typedef typename allocator_type::const_pointer 
    const_pointer; 
  typedef typename allocator_type::reference reference; 
  typedef typename allocator_type::const_reference 
    const_reference; 
  typedef typename allocator_type::value_type value_type; 

Эти типы имеют следующее назначение: 

 

iterator

 и 

const_iterator

 — определяют соответственно типы 

переменных  и  константных  итераторов  произвольного  досту-
па, связанных со строкой; 

 

size_type

 — служит для описания длин строк; 

 

difference_type

 —  служит  для  описания  разности  адресов 

двух символов строки; 

 

reverse_iterator

 и 

reverse_iterator

 — определяют соответст-

венно  типы  переменных  и  константных  обратимых  итерато-
ров, связанных со строкой; 

 

pointer

  и 

const_pointer

  —  описывают  соответственно  указа-

тели на элементы переменных и константных строк; 


background image

Часть IV. Стандартная библиотека языка программирования С++ 

432 

 

reference

  и 

const_reference

 —  описывают  соответственно 

ссылки на элементы переменных и константных строк; 

 

value_type

 — описывает тип элементов строки. 

Итератор (iterator) это абстракция указателя языка программиро-
вания С++. Можно сказать, что итератор это множество классов, 
в  каждом  из  которых  перегружены  операторы  разыменования 

*

инкремента 

++

 и декремента 

--

, которые имеют тот же смысл, что 

соответствующие операторы, применяемые к указателям. В стан-
дартной библиотеке STL итераторы детально классифицированы 
в соответствии с набором перегруженных в них операторов и се-
мантикой исполнения этих операторов. Здесь же только скажем, 
что  любой  итератор  произвольного  доступа  (random  access 
iterator)  перегружает  дополнительно  арифметические  операторы 

+

-

+=

  и 

-=

, а также оператор индексирования 

[]

. В отличие от 

итератора произвольного доступа в обратном итераторе оператор 
индексирования не обязательно может быть перегружен. 
Использование  типов,  ассоциированных  с  шаблоном  класса 

basic_string

, обеспечивает независимость программ от значений 

параметров и реализации этого шаблона класса. 

39.2.2. Специальное значение  

символьного типа 

Статический член: 

  static const size_type npos = -1; 

шаблонного класса 

basic_string

  определяет  константу,  значение 

которой  не  является  действительным  символом.  Эта  константа 
служит  для  возвращения  значения,  выходящего  за  пределы  до-
пустимых значений символов, или как специальный код. 

39.2.3. Конструкторы 

В  шаблоне  класса 

basic_string

  определены  следующие  конст-

рукторы: 

  basic_string(); 
  explicit basic_string(const allocator_type& al); 


background image

Глава 39. Работа со строками в С++ <string> 

433 

  basic_string(size_type n, value_type c); 
  basic_string(size_type n, value_type c, 
      const allocator_type& al); 
  basic_string(const value_type *s, size_type n); 
  basic_string(const value_type *s, size_type n, 
      const allocator_type& al); 
  basic_string(const value_type *s); 
  basic_string(const value_type *s, const allocator_type& al); 
  basic_string(const basic_string& rhs); 
  basic_string(const basic_string& rhs, size_type pos, 
      size_type n = npos); 
  basic_string(const basic_string& rhs, size_type pos, 
      size_type n, const allocator_type& al); 

Все конструкторы запоминают распределитель памяти и инициа-
лизируют последовательность символов в шаблонном классе. 
Если распределитель памяти присутствует как параметр 

al

, то он 

и запоминается. Конструкторы копирования запоминают распре-
делитель  памяти 

rhs.get_allocator()

.  Остальные  конструкторы 

запоминают  распределитель  памяти 

A()

,  где 

A

 —  параметр  шаб-

лона. 
Все  остальные  параметры  конструкторов  служат  для  инициали-
зации  последовательности  символов,  хранящейся  в  строке,  и 
имеют следующее назначение: 

 

n

 —  конструкторов  задает  начальную  длину  создаваемой 

строки; 

 

c

 — задает символ, которым инициализируется строка; 

 

s

 —  задает  строку  языка  программирования  С,  которой  ини-

циализируется строка; 

 

rhs

 —  задает  другую  строку,  которой  инициализируется  соз-

даваемая строка; 

 

pos

 — задает позицию в строке, начиная с которой эта строка 

копируется в создаваемую строку. 

Если других параметров нет, то инициализируется пустая строка. 
В листинге 39.2 приведены примеры инициализации строк. 


background image

Часть IV. Стандартная библиотека языка программирования С++ 

434 

Листинг 39.2. Примеры инициализации строк 

#include <iostream> 
#include <string> 
using namespace std; 
 
int main() 

  string s1(3, 'a'); 
  cout << s1 << endl;  // aaa 
 
  string s2("Demo string"); 
  cout << s2 << endl;  // Demo string 
 
  string s3("Demo string", 4); 
  cout << s3 << endl;  // Demo 
 
  string s4(s2); 
  cout << s4 << endl;  // Demo string 
 
  string s5(s2, 5, 6); 
  cout << s5 << endl;  // string 
 
  return 0; 

39.2.4. Шаблоны конструкторов 

В шаблоне класса 

basic_string

 определены следующие шаблоны 

конструкторов: 

  template <class InIt> basic_string(InIt first, InIt last); 
  template <class InIt> basic_string(InIt first, 
      InIt last, const allocator_type& al); 

Шаблоны конструкторов служат для инициализации строки под-
строкой  другого  объекта  класса 

basic_string

.  Эта  подстрока  за-

дается  интервалом  итераторов 

[first, last)

  (такое  обозначение 

говорит о том, что левая граница входит в интервал, а правая — 
нет).  Параметр 

al

  задает  распределитель  памяти  для  элементов 

строки.  


background image

Глава 39. Работа со строками в С++ <string> 

435 

Например: 

  string s("aaa bbb"); 
  string::iterator it_beg = s.begin(), it_end = s.end(); 
 
  string d(it_beg + 1, it_end - 1); 
  cout << d << endl;  // aa bb 

39.2.5. Операторы присваивания 

В  шаблоне  класса 

basic_string

  перегружены  оператор  присваи-

вания: 

  basic_string& operator=(const basic_string& rhs); 
  basic_string& operator=(const value_type *s); 
  basic_string& operator=(value_type c); 

То есть строкам можно присваивать значения других строк, строк 
языка программирования С и отдельных символов. Например: 

  string s; 
  string t("Some string"); 
 
  s = 'a'; 
  s = "Demo string"; 
  s = t; 

39.2.6. Функции,  

возвращающие итераторы 

В шаблоне класса 

basic_string

 определены следующие функции-

члены, возвращающие итераторы элементов строки: 

  iterator       begin(); 
  const_iterator begin() const; 
  iterator       end(); 
  const_iterator end() const; 
  reverse_iterator       rbegin(); 
  const_reverse_iterator rbegin() const; 
  reverse_iterator       rend(); 
  const_reverse_iterator rend() const; 


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