Стандартная библиотека на С++: алгоритм
РЕСПУБЛИКА КАЗАХСТАН
УНИВЕРСИТЕТ "ТУРАН"
Кафедра "Информационных технологии"
Тема реферата:
"Стандартная библиотека на С++: Алгоритм"
Выполнил: Айнакулов Д.А.
3-курс. "ИС"9 гр.
Проверила: Зиятбекова Г.З.
Алматы – 2008 г.
Содержание
Введение
Стандартная библиотека
Структура библиотеки
Алгоритмы
Заключение
Список использованной литературы
Введение
Языки программирования С++ является универсальными языками программирования высокого уровня, позволяющим создавать различного вида программы прикладного или системного характера. C++ еще является одним из наиболее широко применяемых языков программирования, индустриальным стандартом для создания приложений всевозможного рода. Кроме того, это очень рациональный язык, позволяющий использовать ресурсы более эффективно, чем Pascal , Visual Basic или Delphi . Также его неоспоримым достоинством является наличие быстрого компилятора (фирма Microsoft ). Язык C++ является базовым для программирования на Visual C++. Он используется для программирования в операционных системах и Unix/Linux, и Windows.
Основная задача курса С++ заключается в том, чтобы показать слушателям, что язык программирования С++ - это полноценный, продвинутый и комплексный язык, предназначенный для создания сложных программ, таких как "Бухгалтерия 1С:", "Windows 2000" и клиент - серверовских приложений.
Стандартная библиотека
Стандартная библиотека Си++ включает стандартную библиотеку Си с небольшими изменениями, которые делают её более подходящей для языка Си++. Другая большая часть библиотеки Си++ основана на Стандартной Библиотеке Шаблонов.Стандартная библиотека шаблонов STL. Она предоставляет такие важные инструменты, как контейнеры (например, векторы и списки) и итераторы (обобщённые указатели), предоставляющие доступ к этим контейнерам как к массивам. Кроме того, STL позволяет сходным образом работать и с другими типами контейнеров, например, ассоциативными списками, стеками, очередями. Используя шаблоны, можно писать обобщённые алгоритмы, способные работать с любыми контейнерами или последовательностями, определяемыми итераторами.
Так же, как и в Си, возможности библиотек активизируются использованием директивы #include для включения стандартных файлов. Всего в стандарте Си++ определено 50 таких файлов.
STL до включения в стандарт Си++ была сторонней разработкой, в начале — фирмы Hewlett-Packard HP, а затем SGI. Стандарт языка не называет её "STL", так как эта библиотека стала неотъемлемой частью языка, однако многие люди до сих пор используют это название, чтобы отличать её от остальной части стандартной библиотеки (потоки ввода/вывода Iostream, подраздел Си и др.). Проект под названием http://www.stlport.org/ STLport, основанный на SGI STL, осуществляет постоянное обновление STL, IОstream и строковых классов. Некоторые другие проекты также занимаются разработкой частных применений стандартной библиотеки для различных конструкторских задач. Каждый производитель компиляторов Си++ обязательно поставляет какую-либо реализацию этой библиотеки, так как она является очень важной частью стандарта и широко используется.
''Стандартная библиотека''языка программирования — набор функций и процедур, доступных для вызова из любой программы, написанной на этом языке и присутствующей во всех реализациях языка. В некоторых случаях стандартная библиотека описывается в стандарте языка Python,Perl, Java, в некоторых — отдельными стандартами Си или определяется исходя из практического наличия функций в реализациях языка Basic,Pascal.
В зависимости от возможностей языка, стандартная библиотека может содержать:
* процедура процедуры и функция (программирование) функции
макросы
* глобальная переменная глобальные переменные
* класс программирование классы
* Обобщённое программирование шаблоны
Обычно стандартная библиотека содержит основные алгоритмы и структуры данных, необходимые для:
* работы с динамически распределяемая память динамической памятью
* файловыми операциями ввода-вывода
* операциями ввода-вывода данных на терминал
* конвертацией данных между типами
* функции для работы со строками
* математические операции
* функции для работы с сетью
* функции для обеспечения обработки исключений и ошибок в программе
* функции для поддержки поток (информатика)многопоточности
Существуют два подхода для определения круга задач, которые должна выполнять стандартная библиотека языка программирования.
''Первый'': стандартная библиотека должна содержать в себе только те процедуры и функции, которые используются практически всеми и обладают максимальной универсальностью. В частности, этой позиции придерживался Бьярне Строуструп (автор языка C++) <ref> Bjarne Stroustrup. The C++ Programming Language. 3rd Ed. Addison-Wesley, 1997</ref>
''Второй'': стандартная библиотека должна содержать в себе максимально-возможное количество типичных алгоритмов, обеспечивать простую работу с большинством (в идеале, со всеми) объектами, с которыми может взаимодействовать программа. Одним из примеров реализации этого принципа является язык Python, девиз которого "Batteries included" (батарейки в комплекте) <ref>Guido van Rossum. http://docs.python.org/tut/ Python Tutorial</ref>.
Структура библиотеки
В библиотеке выделяют пять основных компонентов:
* 1. Контейнер (container) - хранение набора объектов в памяти.
* 2. Итератор (iterator) - обеспечение средств доступа к содержимому контейнера.
* 3. Алгоритм (algorithm) - определение вычислительной процедуры.
* 4. Адаптер (adaptor) - адаптация компонентов для обеспечения различного интерфейса.
* 5. Функциональный объект (functor) - сокрытие функции в объекте для использования другими компонентами.
Разделение позволяет уменьшить количество компонентов. Например, вместо написания отдельной функции поиска элемента для каждого типа контейнера обеспечивается единственная версия, которая работает с каждым из них, пока соблюдаются основные требования.
Алгоритмы
В библиотеке STL существует группа функций, выполняющих некоторые стандартные действия, например поиск, преобразование, сортировку, копирование и т. д. Они называются алгоритмами. Параметрами для алгоритмов, как правило, служат итераторы. Алгоритму нет никакого дела до типа переданного ему итератора. Главное, чтобы последний подпадал под определенную категорию. К примеру, если параметром алгоритма должен быть однонаправленный итератор, то подставляемый итератор должен быть либо однонаправленным, либо двунаправленным, или же итератором произвольного доступа.Примером алгоритма может служить equal. Он сравнивает две цепочки данных, адресуемых входными итераторами, и описан следующим образом:
template <class InputIterator1, class InputIterator2>
bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2);
Первый параметр - входной итератор, указывающий на первую цепочку сравниваемых данных. Второй адресует индикатор конца диапазона данных. Третий параметр - вторая цепочка сравниваемых данных. А вот фрагмент сравнения двух векторов (массивов) v1 и v2:
bool isEqual = equal(v1.begin(), v1.end(), v2.begin());
Здесь использованы стандартные методы векторов: begin() возвращает итератор, настроенный на начало цепочки данных, а end() возвращает индикатор выхода за диапазон. Если все элементы векторов попарно равны друг другу, то equal вернет значение "истина" (true).Отметим, что все алгоритмы можно разделить на две основных категории: те, которые изменяют данные, и те, которые их не изменяют.
Заключение
Замечание по названию С++ : ++ - знак операции инкремента в С, если этa операция применяется к переменной (обычно к индексу массива или указателю) значение переменной увеличивается так, чтобы указывать на следующий элемент. Название С++ было предложен Риком Маскитти (Rici Mascitti). С++ в дальнейшем следует рассматривать как уточняющее название, употребляемое либо по формальному поводу, либо во избежании двусмысленности. Среди посвященных С++ именуется С, а язык С, описанный в, "старым С". Более короткое обозначение С является синтаксической ошибкой. Оно также использовалось как название одного, не относящегося к теме статьи, языка. Ценители семантики С найдут, что С++ менее выразительном чем ++С, однако последнее не является приемлемым названием. Язык не назван D, так как является расширением С, а не попыткой решить некие проблемы изначально присущие базовой структуре языкa С. Название С++ отражает эволюционный характер изменений относительно старого С. Еще одну интерпретацию названия С++.
Эволюционизируя из языка С, C++ прошел через несколько промежуточных этапов известных под общим названием "С с классами". Основным намерением являлось создание возможностей абстракции при проектировании больших систем и в то же время полезных в областях, где очень важны лаконичность С и его способность выражать низкоуровневые детали. В связи с этим было специально предусмотрено чтобы использование классов С, предоставляющих общий и гибкий механизм структурирования не приводило в сравнении со старым С к издержкам ни по памяти ни по времени исполнения. Зa исключением таких деталей как введение новых ключевых слов, С++ является надмножеством языка С. "Реализация и совместимость". Язык полностью реализован и используется.
Список использованной литературы
Страуструп Б. Язык программирования C++, спец. изд. Пер. с англ. — М.: "Издательство БИНОМ"; СПб.: Невский Диалект, 2001.
2. Лишнер Р. С++. Справочник. — СПб.: Питер, 2005.
3. Саттер Г. Новые сложные задачи на С++. : Пер. с англ. – М.: Издательский дои "Вильямс", 2005
4. Коплиен Дж. Программирование на С++. Классика Computer Science. — СПб.: Питер, 2005.