Читать «C++: базовый курс» онлайн - страница 320

Herbert Schildt

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

// Пример использования алгоритма transform.

#include <iostream>

#include <list>

#include <algorithm>

using namespace std;

// Простая функция преобразования.

int xform(int i) {

 return i * i; // квадрат исходного значения

}

int main()

{

 list<int> x1;

 int i;

 // Помещаем значения в список.

 for(i=0; i<10; i++) x1.push_back(i);

 cout << "Исходный список x1: ";

 list<int>:: iterator p = x1.begin();

 while(p != x1.end()) {

  cout << *p << " ";

  p++;

 }

 cout << endl;

 // Преобразование списка x1.

 p = transform(x1.begin(), x1.end(), x1.begin(), xform);

 cout << "Преобразованный список x1: ";

 p = x1.begin();

 while(p != x1.end()) {

  cout << *p << " ";

  p++;

 }

 return 0;

}

При выполнении эта программа генерирует такие результаты.

Исходный список x1: 0 1 2 3 4 5 6 7 8 9

Преобразованный список x1: 0 1 4 9 16 25 36 49 64 81

Как видите, каждый элемент в списке x1 теперь возведен в квадрат.

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

Описанные выше алгоритмы представляют собой только малую часть всего содержимого библиотеки STL. И конечно же, вам стоит самим исследовать другие алгоритмы. Заслуживают внимания многие, например set_union() и set_difference(). Они предназначены для обработки содержимого такого контейнера, как множество. Интересны также алгоритмы next_permutation() и prev_permutation(). Они создают следующую и предыдущую перестановки элементов заданной последовательности. Время, затраченное на изучение алгоритмов библиотеки STL, — это время, потраченное не зря!

Класс string

Класс string обеспечивает альтернативу для строк с завершающим нулем.

Как вы знаете, C++ не поддерживает встроенный строковый тип. Однако он предоставляет два способа обработки строк. Во-первых, для представления строк можно использовать традиционный символьный массив с завершающим нулем. Строки, создаваемые таким способом (он вам уже знаком), иногда называют С-строками. Во-вторых, можно использовать объекты класса string, и именно этот способ рассматривается в данном разделе.

В действительности класс string представляет собой специализацию более общего шаблонного класса basic_string. Существует две специализации типа basic_string: тип string, который поддерживает 8-битовые символьные строки, и тип wstring, который поддерживает строки, образованные двухбайтовыми символами. Чаще всего в обычном программировании используются строковые объекты типа string. Для использования строковых классов C++ необходимо включить в программу заголовок <string>.