58
STL контейнерлі класы кезекті және ассоциативті деп бөлінеді. Кезекті
контейнерлер үздіксіз кезектілігі түріндегі бір типті объектілердің соңғы
санын анықтауда қамтамасыз етеді және келесі түрлері бар:
-
векторлар (vector);
-
екі жақты кезектер немесе басқаша айтқанда деректер (deque);
-
тізімдер (list);
-
стегтер (stack);
-
кезектер (quere );
-
п риоритеттері бар кезектер (priority-quere).
Ассоциотивті кезектер сұрыптаудың белгілі критериі бойынша оның
мәніне тәуелді объект(элемент) позициясы бар сұрыпталған коллекцияларды
береді. Ассоциативті контейнерлер кілт бойынша деректермен тез қатынауды
қамтамасыз етеді және балансталған ағаштар негізінде құрылған.
Ассоциативті контейнерлердің келесі түрлері бар:
-
сөздіктер (map);
-
көшірмелері бар сөздіктер (multimap);
-
жиындар (set);
-
көшірмелері бар жиындар (multiset);
-
биттік жиындар (bitset).
Түрлі контейнерлі кластардың ортақ қасиеттері көп және бұл өте
қолайлы. Контейнерлі кластардың стандартталған интерфейсі бар. Бұл түрлі
контейнерлі кластардағы бір атты деректер мүшелер
мен операциялардың
мағынасы бірдей екендігін білдіреді және контейнерлердің барлық типтеріне
қолданылады.
Итераторлар мен функциональды объектілер
Итераторлар ұйымдастыру әдістері мен әрекеттер типіне тәуелсіз
деректердің әрбір типіне қатынау және кезекті қарастыру құрылғылары болып
табылады. Сөйтіп, итератор жалпыланған итератор болып табылады, және
итератор мен көрсеткіш семантикасы бірдей STL –да итераторлар контейнерлі
кластар, ағындар мен буферлі ағындармен жұмыс істеу үшін қолданылады.
Деректер түрлі түрде ұйымдастырылуы мүмкін (массив, тізім, ағаш
және тағы басқа) әрбір кезектілік түрі үшін белгілі операциялар жиынын
қолдайтын итератордың өз типі талап етіледі (кіріс, шығыс,тура, екі
бағытты, және кезекті қатынау). Итераторлы адаптерлер бар,
мыналарды
қолдайтын алгоритмдерді орындауды қамтамасыз ететін арнайы итераторлар:
-
элементтері кері тәртіпте мөлшерден тыс жинау (кері итераторлар);
-
енгізу режимі (енгізу итераторлары);
-
деректер ағынымен жұмыс (ағынды итераторлар).
Функционалды объект деп функцияны шақыру операциясы орындалған
класс типі бар объектті атайды. Жиі түрде функционалды объекттер өңдеу
әдістері мен оларды салыстырудың қолданушы контейнерлерін беруге
арналған стандартты алгогритмдер параметрлері ретінде қолданылады.
Параметр ретінде функционалды объектілер қолданылатын алгоритмдерде
функцияға нұсқауышты қолдануға болады. Bool мәнін қайтаратын
59
функциональды объектілер бар және предикаттар деп аталады. Предикат деп
bool мәнін қайтаратын жай функцияны айтады.
Контейнерлердің өзі үлкен мәндерге иеленбейді. Пайдалы болу үлкен
контейнер негізгі операциялармен жабдықталуы керек.
Стандартты
кітапхана контейнер қолданушысынан талап етілетін көптеген кең таралған
операциялардың орындалуына арналған алгоритмдерді ұсынады. Осындай
алгоритмдер саны алпыс шамасында.
Әрбір алгоритм функция үлгісі түрінде немесе функциялардың
үлгілерінің жиыны түрінде жүзеге асырылған. Соның арқасында алгоритм
кезекшіліктің әр түрімен жұмыс істей алады және түрлі типтердің
деректерімен
(жалпыланған
пролграммалаудың
технологиясының
концепциясы). Қолданушының нақты талаптарының алгоритмін баптау үшін
функционалды объекттер қолданылады. Стандартты
кітапхананың басқа
құрылғылары сияқты стандартты алгоритмдерін қолдану программисті
кезекшілікті өңдеу циклдерін құжаттау, түзету, жазудан айырады. Бұл
бағдарламадағы қателерді кемітеді, өндіру уақытын қысқартады және
анағұрлым оқылатын және жинақты етеді.
STL барлық алгоритмдерді бес категорияға бөледі:
-
кезекшілігі бар модиицирленбейтін операциялар;
-
кезекшілігі бар модиицирленетін операциялар;
-
кезекшілікті сұрыптау алгоритмдері;
-
көпшілікпен пирамидалармен жұмыс істеу алгоритмдері;
-
жалпыланған сандық алгоритмдер.
Параметрлер ретінде алгоритмдерге өңделетін кезектіліктің басы мен
соңын анықтайтын итераторлар беріледі. Итераторлар түрлері
берілген
алгоритм қолданылуы мүмкін контейнерлер типін анықтайды. Мысалы:
сұрыптау алгоритмі sort ( ) еркін қатынау итераторларын қолдануды талап
етеді. Сондықтан ол list контейнерлерімен жұмыс істей алмайды.
Алгоритмдер кезекшілік шегінен шығуды тексермейді.
Бақылау сұрақтары:
1)
Жалпыланған бағдарламалаудың технологиясының концепциясы?
2)
Контейнерлер дегеніміз не, олар не үшін керек?
3)
Итераторлар не үшін арналған?
4)
Қандай операциялар итератордың кез келген типі үшін мүмкін
болып табылады?
5)
STL алгоритмдерінің негізгі категорияларын атап өтіңіз.
Достарыңызбен бөлісу: