С++ для начинающих




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


a i

as at by he in is it no

of on so to and but for has

her him its not now one red row

she sky the you asks bird blue coat

dark each emma fear grow hair held home

life like long mean more puts same says

star such tell that time what when wind

with your alice alive blows daddy falls fiery

lands leave looks quite rises shush shyly sight

still stone tells there thing trees watch almost

either flight houses night, ancient becomes bounded calling

distant flowing heaven, magical passion through unravel untamed

wanting darkened eternity beautiful darkening immensity journeying alternately

immeasurable inexpressibly

Подсчитать число слов, длина которых больше шести символов, можно с помощью обобщенного алгоритма count_if() и еще одного объекта-функции – GreaterThan. Этот объект чуть сложнее, так как позволяет пользователю задать размер, с которым производится сравнение. Мы сохраняем размер в члене класса и инициализируем его с помощью конструктора (по умолчанию – значением 6):

#include <iostream>

class GreaterThan {

public:

   GreaterThan( int size = 6 ) : _size( size ){}

   int size() { return _size; }

   bool operator()( const string & s1 )

      { return s1.size() > 6; }

private:

   int _size;

};

Использовать его можно так:

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

{

   // ...

   // подсчитать число строк, длина которых больше 6

   int cnt = count_if( texts.begin(), texts.end(),

                       GreaterThan() );

   cout << "Number of words greater than length six are "

        << cnt << endl;

   // ...

}

Этот фрагмент программы выводит такую строку:

Number of words greater than length six are 22

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




Содержание  Назад  Вперед