muzruno.com

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

Стандартна библиотека за шаблони (STL),

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

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

C ++ ново ниво

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

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

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

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

Компоненти на библиотеката

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

контейнери

STL типове контейнери

В стандартната библиотека C ++ контейнерите се използват за управление на колекциите и се състоят от обекти от определен тип. Всички контейнери имат набор от плюсове и минуси. Поради това са разработени различни контейнери, подходящи за различни изисквания на програмите. Контейнерите могат да бъдат масиви или свързани списъци. Те могат да бъдат изпълнени със специален ключ за всеки елемент.



Има 3 вида контейнери:

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

итератори

C ++ итератори

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

Интерфейсът на самите итератори е подобен на работата с указатели. Например, за да получите следващия елемент от итератора, трябва да изпълните операцията "++", а за да получите стойността на елемента, към който итераторът понастоящем сочи, е операцията "*". По този начин итераторът е подобен на един вид умен показалец.

алгоритми

Схемата на алгоритъма

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

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

Дали STL е в конфликт с концепциите за OOP?

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

Взаимодействие на компонентите на STL

заключение

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

Споделяне в социалните мрежи:

сроден