Язык программирования C++. Вводный курс


Использование обобщенных алгоритмов


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

1.

Создать копию каждого вектора.

2.      Слить все векторы в один.

3.      Отсортировать его в алфавитном порядке.

4.      Удалить все дубликаты.

5.      Снова отсортировать, но уже по длине слов.

6.      Подсчитать число слов, длина которых больше шести знаков (предполагается, что длина – это некоторая мера сложности, по крайней мере, в терминах словаря).

7.      Удалить семантически нейтральные слова (например, союзы and (и), if (если), or (или), but (но) и т.д.).

8.      Напечатать получившийся вектор.

На первый взгляд, задача на целую главу. Но с помощью обобщенных алгоритмов мы решим ее в рамках одного подраздела.

Аргументом нашей функции является вектор из векторов строк. Мы принимаем указатель на него, проверяя, не является ли он нулевым:

#include <vector>

#include <string>

 

typedef vector<string, allocator> textwords;

void process_vocab( vector<textwords, allocator> *pvec )

{

   if ( ! pvec ) {

      // выдать предупредительное сообщение

      return;

   }

 

   // ...

}

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

(для его использования необходимо включить заголовочные файлы algorithm и iterator):

#include <algorithm>

#include <iterator>

 

void process_vocab( vector<textwords, allocator> *pvec )

{

   // ...

   vector< string > texts;

 

   vector<textwords, allocator>::iterator iter = pvec->begin();

   for ( ; iter != pvec->end(); ++iter )

      copy( (*iter).begin(), (*iter).end(), back_inserter( texts ));

 

   // ...

<


Начало  Назад  Вперед