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


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


перегруженный оператор вызова подставляется в текст программы как встроенная функция. (В качестве третьего аргумента stable_sort() может принимать как указатель на функцию less_than(), так и объект класса LessThan, поскольку аргументом является параметр-тип шаблона. Подробнее об объектах-функциях мы расскажем в разделе 12.3.)

Вот результат применения stable_sort() к вектору texts:

 

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;

 

   // ...

<


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



Книжный магазин