Шрифт:
ПОПРОБУЙТЕ
Перепишите нашу функцию
Вероятно, поиск — это самый очевидный вид итерации. Мы ищем отдельные слова (например,
• Найдем первый символ искомой строки в документе.
• Проверим, совпадают ли эти и следующие символы с символами искомой строки.
• Если совпадают, то задача решена; если нет, будем искать следующее появление первого символа.
Для простоты примем правила представления текстов в библиотеке STL в виде последовательности, определенной парой итераторов. Это позволит нам применить функцию поиска не только ко всему документу, но и к любой его части. Если мы найдем нашу строку в документе, то вернем итератор, установленный на ее первый символ; если не найдем, то вернем итератор, установленный на конец последовательности.
Возврат конца строки в качестве признака неудачного поиска является важным соглашением, принятым в библиотеке STL. Функция
Наш текстовый процессор и его операции очень просты. Очевидно, что мы хотим создать простой и достаточно эффективный, а не “навороченный” редактор. Однако не следует ошибочно думать, что эффективные вставка, удаление и поиск произвольного символа — тривиальные задачи. Мы выбрали этот пример для того, чтобы продемонстрировать мощь и универсальность концепций последовательности, итератора и контейнера (таких как
20.7. Классы vector, list и string
Почему для хранения строк мы используем класс
Сформулируем немного более общий вариант этого вопроса. Для хранения последовательности символов у нас есть четыре способа.
•
•
•
•
•