|
Программирование >> Немодифицирующие последовательные алгоритмы
vector<int>::reverse iterator i; for (i=v.rbegin; i != v.rendO; + + i) cout * i << ; Заметьте, что в этом случае мы пишем ++i вместо -г. Новые элементы языка и проблемы переносимости В программе readwr.cpp способ указания файлов заголовка в строках include может показаться вам непривычным (и отличающимся от того, как мы писали в разделе 1.1). Раньше мы всегда использовали iostream.h и vector.h вместо просто iostream и vector. Эти короткие формы приняты в последней версии С++, которая называется проектом стандарта С++. Во многих случаях можно использовать любой из вариантов, например, указывая как <iostream.h>, так и <iostream>. Далее мы везде будем пользоваться последним, более новым вариантом. Интересно, что, хотя мы пишем <iostream>, на самом деле файл может называться iostream.h (например, для компилятора Borland С++ 5.2). В связи с этим возникают сомнения, правомерно ли называть iostream файлом заголовка. С этого раздела начнем использовать термин заголовок, а не фаш заголовка. В соответствии с принятым употреблением мы будем применять этот короткий термин не только к именам, заключенным в угловые скобки, как <iostream>, но и к самим файлам, таким как iostream.h. Другой новый аспект языка заставит нас добавлять конструкцию using namespace std в начале программы. Если опустим эту строчку, может появиться сообщение об ошибке типа Не определен символ vector . Преимущества использования концепции пространства имен, как мы обсуждали в разделе 1.1, заключаются в том, что имена наподобие vector не загрязняют глобальное пространство имен . Иными словами, мы вправе использовать слово vector на глобальном уровне для любой другой цели. Если мы поступим так, то при необходимости разрешить неоднозначность напишем -.-.vector для глобальной версии и stdv.vector - для версии STL. Два популярных компилятора С++ Как Visual С++ 5.0 (VC5), так и Borland С++ 5.2 (ВС5) поддерживают пространства имен. STL полностью интегрирована в их библиотеки, так что не требуется никаких специальных действий, чтобы начать ее использование. Многие используют эти компиляторы из интегрированной среды разработки, с помощью которой возможно редактировать программные файлы, компилировать их и т. д. Вместо этого мы будем компилировать и компоновать программы из командной строки с помощью команды с/ или Ьсс32. Для этого в командную строку PATH-файла autoexec.bat должен быть вставлен путь с:\progra~l\devstudio\vc\bin или с:\progra~l\borland\cbuilder\bin Для работы с VC5 необходимо также ввести команду vcvars32 чтобы указать компилятору, где следует искать включаемые файлы и библиотеки. Версии STL Изначальная версия STL от компании Hewlett-Ickard составила основу значительной части проекта стандарта С++. Эта версия доступна в сети Internet и может быть бесплатно использована и модифицирована при соблюдении нестрогих условий, указанных в следующем уведомлении о копирайте: Copyright (с) 1994, Hewlett-Packard Company. Разрешение использовать, делать копии, модифицировать, распространять и продавать это программное обеспечение и сопутствующую документацию в любых целях предоставляется настоящим уведомлением при условии, что как вышеприведенное уведомление о копирайте, так и настоящее уведомление об использовании будет приведено в сопутствующей документации. Компания Hewlett-Packard не несет ответственности за пригодность к использованию этого программного обеспечения в каких бы то ни было целях. Это программное обеспечение предоставляется как есть , без явных либо неявных гарантий. Версия STL, включенная в проект стандарта С++, отличается от изначальной (которую мы будем называть HP STL) количеством и именами заголовков. Вместо 48 файлов в HP STL в проекте стандарта С++ используется только 13 (см. табл.). algo.h bvector.h faralloc.h fmap.h fset.h heap.h hmultmap.h hugalloc .h Ibvector.h llist.h Imultset.h map.h neralloc.h nmultset.h projectn.h tempbuf.h Заголовки HP STL algobase.h defalloc.h fdeque.h fmultmap.h function.h hlist.h hmultset.h hvector.h Ideque.h Imap.h Ingalloc.h multimap.h nmap.h nset.h set .h tree.h bool.h deque.h flist.h fmultset.h hdeque.h hmap.h hset.h iterator.h list.h Imultmap.h Iset.h multiset.h nmultmap.h pair.h stack.h vector.h Стандартная STL algorithm deque functional iterator list memory numeric queue stack utility vector Как VC5, так и BC5 соответствуют проекту стандарта С++ по названиям заголовков. Если у вас более старый компилятор (вместе с HP STL), вероятно, он потребует, чтобы имена заголовков содержали в себе ./г, так что вам придется писать <vector.h> и <iostream.h> вместо <vector> и <iostream>. В этом слзае будет также необходимо убрать операторы using, вроде того, что предшествует функции main в программе readwr.q)p. Стандартная библиотека шаблонов фирмы SGI, адаптированная для VC++ 5.0 Хотя VC5 очень хороший компилятор, в версии STL, которая с ним поставляется, имеются некоторые проблемы. Поскольку они могут быть разрешены в следующем релизе этого компилятора, не будем их подробно обсуждать. В то же время пользователи Visual С++ могут выбрать версию STL, написанную проектировщиком STL Александром Степановым для фирмы Silicon Graphics (SGI) и адаптированную для VC5 Уэйном Учида (Wayne Ouchida). Следующая Web-страничка содержит подробную информацию по этому вопросу: http: www.sirius.com/~ouchida/ Версия SGI STL часто упоминается в связи с ее высоким качеством, и эта адаптация поможет программистам, работающим с Visual С++, воспользоваться этим преимуществом. В тех слзаях, где современные версии STL отличаются друг от друга, за основу для примеров в этой книге берется проект стандарта С++ (на декабрь
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |