Программирование >>  Формирование пользовательского контейнера 

1 ... 96 97 98 [ 99 ] 100 101 102 ... 156


return false; не найлен

При заданном from находит какой-нибудь путь.

Возвращает true, если путь найден,

и false - в противном случае.

bool Search::find(string from, Roomlnfo &f)

for(unsigned i=0; i < rooms.size(); i++) {

if(rooms[i].from == from && !rooms[i].skip) { f = rooms[i];

rooms[i].skip = true; предотвращает повторное использование return true;

return false;

Ищет ключи.

void Search::findkeys(string from, string to) {

Roomlnfo f;

Проверяет, найдены ли ключи, if (match(from, to)) {

btstack.push(Roomlnfo(from, to)); 1 return; )

Проверяет другую комнату, if(find(from, f)) {

btstack.push(Roomlnfo(from, to));

findkeys(f.to, to);

else if (!btstack.empcyO) {

Возвращается и пробует другой путь.



int mainO Search ob;

Добавляет комнаты в базу данных, ob.addroom( front door , Ir ); ob.addroom( Ir , bath ); ob.addroom( Ir , hall ); ob.addroom( hall , bdl ); ob.addroom( hall , bd2 ); ob.addroom( hall . mb ); ob.addroom( Ir , ki tcheh ); ob.addroom( ki tchen , keys );

Ищет ключи.

ob. f indkeys { f ront door , keys ); Если ключи найдены, показывает путь, if (ob.keysfoundO ) ob.routeO ;

return 0;

Задания для самостоятельной работы

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

f = btStack.top() ;

btStack.popO ;

findkeys(f.from, f.to);



Глава 8

Разработка пользовательского контейнера STL

Главная тема книги - богатые возможности, предоставляемые программисту, пишущему на С++. Может быть, лучше всего их проиллюстрирует стандартная библиотека шаблонов (STL), позволяющая изменить способ написания профамм. Библиотека STL представляет собой тщательно разработанный набор шаблонов классов и функций, которые реализуют многие популярные и часто используемые структуры данных и алгоритмы. Поскольку библиотека предлагает готовые решения для множества задач профаммирования, включающих хранение и извлечение данных, код с применением STL встречается очень часто. Например, подсистема сбора мусора из гтвы 2 и панель управления из главы 3 используют эту библиотеку, существенно упрощающую их код. В прошлом необходимую структуру, такую как список, стек или очередь, приходилось профаммировать вручную. Сегодня Профаммист может просто использовать одну из структур библиотеки STL.

Ядром стандартной библиотеки шаблонов служит контейнер, представляющий собой объект, содержащий другие объекты. Библиотека STL предлагает несколько всфоенных контейнеров, которые поддерживают такие структуры данных, как стеки, очереди, списки и векторы. Поскольку контейнеры в библиотеке описаны как шаблоны (templates), они могут содержать объекты любых типов, включая объекты созданных вами классов.

Несмотря на то, что встроенные контейнеры очень полезны, ваши возможности не офаничиваются ими. Одно из впечатляющих достоинств библиотеки STL состоит в том, что она позволяет создавать собственные коитейне-РЬ1. Таким образом, стандартную библиотеку шаблонов можно расширять, к только вы описали контейнер, он автоматически становится совместимым с остальным содержимым STL.

В этой главе вы узнаете, как можно создать свой собственный контейнер STL. Несмотря на то, что создать пользовательский контейнер нетрудно, многих Профаммистов пугает подобная затея. Причиной тому - непреолол!:мый На первый взгляд синтаксис библиотеки STL, базирующийся на шаблонах. На самом деле стандартная библиотека шаблонов - концептуально строгая



1 ... 96 97 98 [ 99 ] 100 101 102 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика