stable_sort( texts.begin(), texts.end(), LessThan() );

for_each( texts.begin(), texts.end(), PrintElem() );

cout "\n\n";

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

int cnt = 0;

// устаревшая форма count - в стандарте используется другая

count_if( texts.begin(), texts.end(), GreaterThan(), cnt );

cout "Number of words greater than length six are "

cnt endl;

static string rw[] = { "and", "if", "or", "but", "the" };

vector string,allocator remove_words( rw, rw+5 );

vector string, allocator ::iterator it2 = remove_words.begin();

for ( ; it2 != remove_words.end(); ++it2 )

{

int cnt = 0;

// устаревшая форма count - в стандарте используется другая

count( texts.begin(), texts.end(), *it2, cnt );

cout cnt " instances removed: "

(*it2) endl;

texts.erase(

remove(texts.begin(),texts.end(),*it2),

texts.end()

);

}

cout "\n\n";

for_each( texts.begin(), texts.end(), PrintElem() );

}

// difference_type - это тип, с помощью которого можно хранить результат

// вычитания двух итераторов одного и того же контейнера

// - в данном случае вектора строк ...

// обычно это предполагается по умолчанию

typedef vectorstring,allocator::difference_type diff_type;

// предшествующий принятию стандарта синтаксис для

#include fstream.h

main()

{

vectortextwords, allocator sample;

vectorstring,allocator t1, t2;

string t1fn, t2fn;

// запросить у пользователя имена входных файлов ...

// в реальной программе надо бы выполнить проверку

cout "text file #1: " cin t1fn;

cout "text file #2: " cin t2fn;

// открыть файлы

ifstream infile1( t1fn.c_str());

ifstream infile2( t2fn.c_str());

// специальная форма итератора

// обычно diff_type подразумевается по умолчанию ...

istream_iterator string, diff_type input_set1( infile1 ), eos;

istream_iterator string, diff_type input_set2( infile2 );

// специальная форма итератора

copy( input_set1, eos, back_inserter( t1 ));

copy( input_set2, eos, back_inserter( t2 ));

sample.push_back( t1 ); sample.push_back( t2 );

process_vocab( &sample );

}

Упражнение 12.2

Длина слова – не единственная и, вероятно, не лучшая мера трудности текста. Другой возможный критерий – это длина предложения. Напишите программу, которая читает текст из файла либо со стандартного ввода, строит вектор строк для каждого предложения и передает его алгоритму count(). Выведите предложения в порядке сложности. Любопытный способ сделать это – сохранить каждое предложение как одну большую строку во втором векторе строк, а затем передать этот вектор алгоритму sort() вместе с объектом-функцией, который считает, что чем строка короче, тем она меньше. (Более подробно с описанием конкретного обобщенного алгоритма, а также с иллюстрацией его применения вы может ознакомиться в Приложении, где все алгоритмы перечислены в алфавитном порядке.)

Упражнение 12.3

Перейти на страницу:

Похожие книги