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