Иллюстрированный самоучитель по практике программирования

C++

Функция build использует библиотеку lost ream для ввода слов по одному:

Иллюстрированный самоучитель по практике программирования › Проектирование и реализация › C++

Строка buf будет расти по мере надобности, чтобы в ней помещались вводимые слова произвольной длины.

В функции add более явно видны преимущества использования STL:

Иллюстрированный самоучитель по практике программирования › Проектирование и реализация › C++

Как вы видите, выражения выглядят совсем не сложно; происходящее "за кулисами" тоже вполне доступно пониманию простого смертного. Контейнер map переопределяет доступ по индексу (операцию [ ]) для того, чтобы он работал как операция поиска. Выражение statetab[prefix] осуществляет поиск в statetab по ключу prefix и возвращает ссылку на искомое значение; если вектора еще не существует, то создается новый. Функция push_back – такая функция-член класса имеется и в vector, и в deque – добавляет новую строку в конец вектора или дека; pop_front удаляет ("выталкивает") первый элемент из дека.

Генерация результирующего текста осуществляется практически так же, как и в предыдущих версиях:

Иллюстрированный самоучитель по практике программирования › Проектирование и реализация › C++

Итак, в результате именно эта версия выглядит наиболее понятно и элегантно – код компактен, структура данных ясно видна, а алгоритм абсолютно прозрачен. Но, как и за все хорошее в жизни, за это надо платить – данная версия работает гораздо медленнее, чем версия, написанная на С; правда, это все же не самый медленный вариант. Вопросы измерения производительности мы вскоре обсудим.

Упражнение 3.5
Одно из главных преимуществ использования STL состоит в той простоте, благодаря которой можно экспериментировать с различными структурами данных. Попробуйте изменить эту версию, используя различные структуры данных для префиксов, списка суффиксов и таблицы состояний. Посмотрите, как при этом изменяется производительность.

Упражнение 3.6
Перепишите программу на C++ так, чтобы в ней использовались только классы и тип данных string – без каких-либо дополнительных библиотечных средств. Сравните то, что у вас получится, по стилю кода и скорости работы с нашей STL-версией.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.