Что такое STL
STL это cтандартная библиотека шаблонов, одна из самых сильных сторон C++. Она есть во всех новых компиляторах C++ и вообще обязана там быть по стандарту C++
Давайте я покажу, что реально умеет STL.
Пример #1: Сортировка массива
int array[10]={8,342,23,34,56,32,43,44,34,34};
sort(array,array+10);
Как вы видите всего 2 строчки. Я верю что на паскале такую процедуру осуществить не сложно но дело в том что в C++ это шаблон. т.е. он работает с любыми типами данных для которых определена операция сравнения (напоминаю что в C++ создавая свой тип(класс) вы можете определить для
него оператор сравнения)
т.е. вот такой пример тоже работает
AnsiString array[10]={"dsds","saddas","sds","dsaas","asa","asd","dsdsa","asaa","asa","rdfd"};
sort(array,array+10);
Пример 2: контейнеры.
В VCL есть такие вещи как TList но они хранят указатели и поэтому работа с ними осложняется тем что надо их приводить к соотв типу. Это во первых просто утомительно, а во вторых иногда приводит к ошибкам. В C++ это делается так:
/* Список */
list<int> IntegerList;
/* массив с плавающей границей */
vector<int> IntegerArray;
/* Ассоциативный массив, т.е. который индексируется не целым типом а чем хочешь*/
map<AnsiString, TColor> NameToColor;
/* данный массив например ассоциирует цвети со строкой */
set<AnsiString> StringSet /*множество*/
Например добавляем везде элементов
IntegerList.insert(IntegerList.end(),1);
IntegerArray.insert(IntegerArray.end(),1);
StringSet.insert(StringSet.end(),"foo");
NameToColor["clBlack"]=clBlack;
обратите внимание что везде синтаксис одинаковый
(кроме map но там сильно другая структура)
Теперь допустим нам надо пробежаться по всем элеменкам контейнера
и сделать для каждого какое-нибудь действие.
for (list<int>::iterator i=IntegerList.begin();i!=IntegerList.end();i++)
{
int CurrElem=*i;
}
for (vector<int>::iterator i=IntegerArray.begin();i!=IntegerArray.end();i++)
{
int CurrElem=*i;
}
for (set<AnsiString>::iterator i=StringSet.begin();i!=StringSet.end();i++)
{
AnsiString CurrElem=*i;
}
for (map<AnsiString, TColor>::iterator i=NameToColor.begin();i!=NameToColor.end();i++)
{
AnsiString CurrIndex=(*i).first;
AnsiString CurrValue=(*i).second;
}
Обратите внимание несмотря, что все контейнеры такие разные пробег выглядит почти одинаково. Это позволяет писать такие вещи автоматически с помощью только спинного мозга.
Такие вещи позволяют программисту на C++ не заботится о таких мелких вещах как реализация классических алгоритмов и оставляет больше времени на программирование(то что я показал это меньше 1% библиотеки. STL содержит не все алгоритмы которые описаны в Кнуте, но все те которые реально нужны там есть) В эффективности написанных алгоритмов можете не сомневаться.
Сайт управляется системой
uCoz