Стандартни C ++ библиотеки

Стандартната библиотека с шаблони (STL) или стандартната библиотека с шаблони са повлияли на C ++ архитектурата и са станали ядрото на езика. STL е набор от универсални компоненти и усъвършенствани алгоритми за управление на данни с висока производителност. Благодарение на този C ++ библиотечен програмист, напреднали постижения в областта на структурите от данни и ефективни алгоритми станаха достъпни без необходимост от подробно разбиране на тяхната структура и работа.

C ++ отива на ново ниво

За програмиста, STL е представен от набор от класове колекции, предназначени за конкретни цели и чрез набор от алгоритми, които могат да работят с тях. Поради факта, че всички библиотечни компоненти са шаблони, те могат да се използват за всеки тип елемент. В допълнение, библиотеката ви позволява да създавате собствени класове и алгоритми, които могат да работят заедно със съществуващите.


Този подход за организиране на работата с данни и алгоритми показва C + + на качествено различно ниво на абстракция. Сега програмистът не е обременен със създаването на динамични масиви, списъци, дървета, хешове. Той може също да забрави за програмирането на различни алгоритми за търсене и заобикаляне. С появата на STL програмиста е достатъчно да се определи подходящия контейнер и да се използват неговите членни функции и алгоритми за обработка. STL компонентите са в състояние да работят с произволни типове данни. Това се постига с факта, че всички компоненти на C ++ библиотеката са шаблони, които ви позволяват да използвате всякакви типове, ако са способни да извършват необходимите операции. Това са контейнери и алгоритмиобобщени по отношение на типовете. Тази концепция се нарича генерично програмиране.


Въпреки промените, въведени в C ++ с появата на STL, не трябва да се забравя, че езикът е бил ефективен и многофункционален инструмент за програмиране и преди неговия външен вид, както и всички негови възможности, записани на C ++ (например библиотеката система или ctime) и с появата на STL само се умножава.

Библиотечни компоненти

Структурните блокове на библиотеката са добре структурирани компоненти и тяхното добре функциониращо взаимодействие. Основните такива блокове са контейнери, итератори и алгоритми. С ++, STL библиотеката предоставя невероятно ниво на гъвкавост на програмиране, но е трудно да се разбере и изисква много преди времето на разработване.

Контейнери

В стандартната C ++ библиотека, контейнерите се използват за управление на колекции и се състоят от обекти от определен тип. Всички контейнери имат набор от предимства и недостатъци. Ето защо, различните контейнери са проектирани да отговарят на различните изисквания, предлагани от програмите. Контейнерите могат да бъдат масиви или свързани списъци. Те могат да бъдат реализирани и с помощта на специален ключ за всеки елемент. Има 3 вида контейнери:
  • Последователни контейнери. Те са поръчани колекции. Всеки елемент има своя позиция, която зависи от времето на вмъкване и не зависи от стойността на елемента. Последователни контейнери от 5 разновидности: масив, вектор, списък, списък.
  • Асоциативни контейнери. Също така е подредена колекция от елементи, но тяхната позиция зависи от стойносттасамият елемент или ключът, ако елементите на колекцията са двойка ключ-стойност. Съществуват 4 стандартни асоциативни контейнера: комплект, мултисеть, карта, multimap.
  • Разбъркани асоциативни контейнери. В този случай редът на елементите в колекцията не засяга нито стойността, нито времето на вмъкване на елемента в колекцията. Ако вмъкнете в тази колекция n-ти брой елементи, техният ред ще бъде непредсказуем. Освен това с течение на времето може да се промени. Неподредените контейнери са: неподреден набор, неподреден мултисеть, неподредена карта, неподреден мултимап.
  • Итератори

    Това са механизми, използвани за заобикаляне на елементи в колекция от обекти. В този случай колекциите могат да бъдат както контейнери, така и техните подгрупи. Основното предимство на итераторите е, че те създават минимален, достатъчен и гъвкав интерфейс за всеки тип контейнер. Например една от задачите на итераторите е да преместите елементите на колекцията и тя не зависи от структурата на тази колекция, която може да бъде нещо: масив, дърво, хеш таблица. Изборът на елементи работи по същия начин.
    Интерфейсът на самите итератори е подобен на работата с указатели. Например, за да получите итератор на следващия елемент, трябва да изпълните операцията "++" и да получите стойността на елемента, който в момента показва итератора, - операция "*". По този начин итераторът е подобен на вид интелектуален указател.

    Алгоритми

    Основната задача на алгоритмите е да се справят с елементите на колекциите. Например, прегледайте или сортирайте, променете или използвайте стойности на елементи.Алгоритмите се реализират за сметка на итератори. Този подход ви позволява да създадете алгоритъм само веднъж и да разширите работата си до всички контейнери, поради един итератор на интерфейс. Механизмът на спомагателните функции, причинен от алгоритмите, е разработен за изключително сложни задачи. Това осигурява необходимата гъвкавост за справяне със специфични случаи. Например, програмист може да поиска конкретен критерий за търсене. С появата на ламбда-функции, имаше възможности за описване на всякакви операции, извършени върху елементите на контейнерите, когато те са разменени. По този начин библиотеката на C ++ функциите е много гъвкава.

    Противно на STL концепциите на ООП?

    В C ++ библиотеката, STL данните се контролират от контейнерни класове и операциите се конфигурират от алгоритми. Оказва се, че концепцията на STL библиотеката разделя данни и операции, което е в противоречие с принципите на обектно-ориентираното програмиране, които изискват обединяване на данни и операции. Това обаче е извинение. Благодарение на взаимодействието на алгоритми с всякакви контейнери чрез итератори, програмистът може да комбинира всички данни с всякакви операции. По този начин противоречието с ООП се елиминира и се постига напълно ново ниво на гъвкавост.

    Заключение

    STL е нов или подобрен подход към програмирането. Началото на библиотеката се появи отдавна. Първите идеи възникват през 1992-1994. И след много години на развитие, STL е напълно интегриран в C ++ 11 стандарта. Библиотеката има голяма функционалност и голяма гъвкавост, но с товатрудно за разбиране. Нейната документация включва стотици уеб-страници (например документация на сайта на Microsoft Visual C ++ библиотека), а описанието взема книги за 1000 + страници. В този случай библиотеката се развива активно.

    Свързани публикации