Стандардна библиотека шаблона — разлика између измена

Садржај обрисан Садржај додат
Нова страница: {{МАТФ032014}} '''Стандардна библиотека шаблона''' (енг. Standard Template Library (STL)) је соф…
 
Autobot (разговор | доприноси)
м Разне исправке; козметичке измене
Ред 1:
{{МАТФ032014}}
 
'''Стандардна библиотека шаблона''' ([[Енглески језик|енг.]] Standard Template Library (STL)) је софтверска библиотека програмског језика [[C++]] која је делимично укључена у [[C++ стандардна библиотека|С++ стандардну библиотеку]]. ОбeзбеђујеОбезбеђује четири компоненте: контејнере, итераторе, алгоритме и функторе.
 
STL обезбеђује готов скуп основних класа за C++, као што су контејнери и [[Асоцијативни низ|асоцијативни низови]], који се може користити уз било који уграђени тип и уз било који кориснички дефинисан тип који подржава неке основне операције (као што су копирање и додела). STL алгоритми су независни од контејнера, што значајно смањује комплексност библиотеке.
Ред 7:
STL остварује резултате кроз употребу шаблона. Овај приступ обезбеђује полиморфизам времена компајлирања који је често ефикаснији од традиционалног полиморфизма времена покретања. Модерни C++ [[Компилатор|преводиоци]] подешени су тако да минимализују било какву казну апстракције насталу интензивном употребом STL-а.
 
STL је настао као прва библиотека генеричких алгоритама и структура података за C++, са четири идеје на уму: [[Генеричко програмирање|генеричко програмирање]], апстракција без губитка ефикасности, [[Фон Нојманова архитектура|фон Нојманова архитектура]] и вредносна семантика.
 
== Композиција ==
=== Контејнери ===
STL садржи секвенцијалне контејнере и асоцијативне контејнере. Стандардни секвенцијални контејнери су: низ, [[Red sa dva kraja|ред са два краја]], и [[Povezana lista|листа]]. Стандардни асоцијативни контејнери су: скуп, мултискуп, мапа (асоцијативни низ) и [[Мултимапе|мултимапа]]. Постоје такође и адаптери контејнера: ред, ред са приоритетом и [[Стек (апстрактни тип података)|стек]], што су контејнери са специфичним интерфејсом, који користе друге контејнере као имплементацију.
 
Ред 30:
| || align="center" | '''Асоцијативни контејнери: неуређене колекције'''
|-
| align="center" | скуп (set) || align="center" | математички [[Скуп|скуп]]; убацивање/брисање елемената чува итераторе. Обезбеђене су скуповне операције [[Унија (теорија скупова)|унија]], [[Пресек (теорија скупова)|пресек]], [[Разлика (теорија скупова)|разлика]], симетрична разлика и тест инклузије.
|-
| align="center" | мултискуп (multiset) || align="center" | исто као скуп, с тим што дозвољава дупликате елемената (математички [[Мултискуп|мултискуп]])
|-
| align="center" | мапа (map) || align="center" | асоцијативни низ; обично се имплементира коришћењем [[Самобалансирајуће бинарно стабло претраге|самобалансирајућег бинарног стабла претраге]]
Ред 40:
|}
 
=== Итератори ===
STL имплементира пет различитих типова итератора. То су улазни итератори (који могу да се користе само за читање низа вредности), излазни итератори (који могу да се користе само за испис низа вредности), forward итератори (који се могу читати, у које се може писати и који се могу померати напред), двосмерни итератори (који су као forward итератори, само што се могу такође померати назад) и итератори са случајним приступом (који се слободно могу померати неодређени број корака у једној операцији).
 
Ред 49:
Ипак, општост понекад има и своју цену. На пример, извршавање претраге на асоцијативном контејнеру као што је мапа или скуп може бити доста спорије коришћењем итератора него позивањем чланова функција понуђених од самог контејнера. Ово се дешава зато што методе асоцијативног контејнера могу имати предност у познавању унутрашње структуре, што је непознато алгоритмима који користе итераторе.
 
=== Алгоритми ===
Велики број алгоритама за извршавање операција као што су претрага и сортирање обезбеђени су у STL-у, сваки имплементиран тако да захтева одређени ниво итератора (и зато ће радити на било ком контејнеру који обезбеђује везу ка итераторима).
 
=== Функтори ===
STL садржи класе које оптерећују функцију оператор (operator()). Инстанце таквих класа зову се функтори или функцијски објекти. Функтори дозвољавају параметризацију понашања функције (на пример кроз аргументе прослеђене функторском конструктору).
 
== Историјат ==
Архитектура STL-а је већински креација Александра Степанова. 1979. године он је почео да разрађује своје почетне идеје генеричког програмирања и да истражује њихов потенцијал за развој софтвера. Иако је Дејвид Масер развио и бранио неке аспекте генеричког програмирања још 1971. године, оно је било ограничено на специјализованију област развоја софтвера (рачунска алгебра).
 
Ред 68:
Одбор је имао неколико захтева за промене и екстензије, и мала група његових чланова срела се са Степановим и Лијем ради пружања помоћи око разраде детаља. Захтеви за најзначајнију екстензију (асоцијативни контејнери) морали су да се покажу конзистентним, што је урађено њиховом потпуном имплементацијом, посао који је Степанов предао Масеру. Степанов и Ли произвели су предлог који је коначно одобрен на састанку ANSI/ISO одбора у јулу 1994.
 
== Референце ==
* Alexander Stepanov and Meng Lee, The Standard Template Library. HP Laboratories Technical Report 95-11(R.1), 14 November 1995. (Revised version of A. A. Stepanov and M. Lee: The Standard Template Library, Technical Report X3J16/94-0095, WG21/N0482, ISO Programming Language C++ Project, May 1994.)
* Alexander Stepanov (2007). Notes on Programming. Stepanov reflects about the design of the STL.
* Nicolai M. Josuttis (2000). The C++ Standard Library: A Tutorial and Reference. Addison-Wesley. ISBN 0-201-37926-0.
* Scott Meyers (2001). Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Addison-Wesley. ISBN 0-201-74962-9.
* David Vandevoorde and Nicolai M. Josuttis (2002). C++ Templates: The Complete Guide. Addison-Wesley Professional. ISBN 0-201-73484-2.
* Atul Saini and David R. Musser, STL Tutorial and Reference Guide: C+ + Programming with the Standard Template Library. Foreword by Alexander Stepanov; [Copyright Modena Software Inc.] Addison-Wesley ISBN 0-201-63398-1