Что такое STL
 
STL это cтандартная библиотека шаблонов, одна из самых сильных сторон C++. Она есть во всех новых компиляторах C++ и вообще обязана там быть по стандарту C++
 
Давайте я покажу, что реально умеет STL.

Пример #1: Сортировка массива

int array[10]={8,342,23,34,56,32,43,44,34,34};
so
rt(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;

/* Ассоциативный массив
, т.е. который индексируется не целым типом а чем хочешь*/

m
ap<AnsiString, TColor> NameToColor;
/* данный массив например
ассоциирует цвети со строкой */

set<AnsiString> StringSet /
*множество*/

Например добавляем везде элементов

IntegerList
.insert(IntegerList.end(),1);
IntegerArray.insert(IntegerArra
y.end(),1);
StringSet.insert(StringSet.end(),"foo");
NameToCo
lor["clBlack"]=clBlack;

обратите внимание что везде синтакси
с одинаковый
(кроме map но там сильно другая структура)


Теп
ерь допустим нам надо пробежаться по всем элеменкам контейнера
и сделать для каждого какое-нибудь действие.

for (list<int
>::iterator i=IntegerList.begin();i!=IntegerList.end();i++)
{

       int CurrElem=*i;
}

for (vector<int>::iterator i=Inte
gerArray.begin();i!=IntegerArray.end();i++)
{
       int Curr
Elem=*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