Shablonlar (Templates): Umumiy dasturlash va standart andozalar kutubxonasi (stl)
Download 27.63 Kb.
|
1 2
Bog'liqShablonlar(Templates)
Shablonlar (Templates): Umumiy dasturlash va standart andozalar kutubxonasi (STL). Standart andozalar kutubxonasi ( STL ) C++ standart kutubxonasining koʻp qismlariga taʼsir koʻrsatgan C++ dasturlash tili uchun dastlab Aleksandr Stepanov tomonidan ishlab chiqilgan dasturiy kutubxonadir . U algoritmlar , konteynerlar , funktsiyalar va iteratorlar deb ataladigan to'rtta komponentni taqdim etadi. STL C++ uchun konteynerlar va assotsiativ massivlar kabi umumiy sinflar to'plamini taqdim etadi , ulardan har qanday o'rnatilgan turdagi va ba'zi elementar operatsiyalarni (masalan, nusxa ko'chirish va tayinlash) qo'llab-quvvatlaydigan foydalanuvchi tomonidan belgilangan har qanday turdagi bilan foydalanish mumkin. STL algoritmlari konteynerlardan mustaqildir, bu kutubxonaning murakkabligini sezilarli darajada kamaytiradi. STL o'z natijalariga shablonlardan foydalanish orqali erishadi . Ushbu yondashuv an'anaviy ish vaqti polimorfizmidan ko'ra samaraliroq bo'lgan kompilyatsiya vaqti polimorfizmini ta'minlaydi . Zamonaviy C++ kompilyatorlari STL dan og'ir foydalanish natijasida kelib chiqadigan abstraksiya jazolarini minimallashtirish uchun sozlangan. STL C++ uchun umumiy algoritmlar va maʼlumotlar tuzilmalarining birinchi kutubxonasi sifatida yaratilgan boʻlib, unda toʻrtta gʻoya nazarda tutilgan: umumiy dasturlash , samaradorlikni yoʻqotmasdan mavhumlik , Von Neumann hisoblash modeli va qiymat semantikasi . STL va C++ standart kutubxonasi ikki xil ob'ektdir. 1993 yil noyabr oyida Aleksandr Stepanov C++ standartlashtirish bo'yicha ANSI/ISO qo'mitasiga umumiy dasturlashga asoslangan kutubxonani taqdim etdi . Qo'mitaning javobi juda ijobiy bo'ldi va Endryu Koenigdan 1994 yil mart oyidagi yig'ilish uchun o'z vaqtida rasmiy taklif so'rashiga olib keldi. Qo'mita o'zgartirish va uzaytirish bo'yicha bir nechta so'rovlarni oldi va qo'mita a'zolari tafsilotlarni ishlab chiqishda yordam berish uchun Stepanov va Meng Li bilan uchrashdi. Eng muhim kengaytmaga qo'yiladigan talablar ( assotsiativ konteynerlar ) ularni to'liq amalga oshirish orqali izchil bo'lishini ko'rsatish kerak edi, bu vazifani Stepanov Devid Musserga topshirdi . Taklif 1994 yil iyul oyida ANSI/ISO qo'mitasi yig'ilishida yakuniy ma'qullandi. Keyinchalik, Stepanov va Li hujjati 17 ANSI/ISO C++ standarti loyihasiga kiritildi (1, 17-27-bandlarning qismlari). STLning erta keng tarqalishi istiqbollari Hewlett-Packardning 1994 yil avgust oyida Internetda uni amalga oshirishni bepul qilish to'g'risidagi qarori bilan sezilarli darajada yaxshilandi . Standartlashtirish jarayonida Stepanov, Li va Musser tomonidan ishlab chiqilgan ushbu dastur asos bo'ldi. STL besh xil turdagi iteratorlarni amalga oshiradi . Bular kiritish iteratorlari (faqat qiymatlar ketma-ketligini o'qish uchun ishlatilishi mumkin), chiqish iteratorlari (faqat qiymatlar ketma-ketligini yozish uchun ishlatilishi mumkin), oldinga iteratorlar (o'qish, yozish va oldinga siljish mumkin), ikki tomonlama iteratorlar (ular oldinga iteratorlar kabi, lekin orqaga ham harakatlanishi mumkin) vatasodifiy kirish iteratori (bir operatsiyada istalgan miqdordagi qadamlarni erkin harakatlantirishi mumkin). Asosiy STL kontseptsiyasi - bu hisoblashning boshi va oxirini belgilovchi iteratorlar juftligi bo'lgan diapazon va kutubxonaning ma'lumotlar tuzilmalarida ishlaydigan algoritmik shablonlarining ko'pchiligi diapazonlardan foydalanadigan interfeyslarga ega Ikki tomonlama iteratorlar tasodifiy kirish iteratorlari kabi harakat qilishlari mumkin, shuning uchun o'n qadam oldinga siljish bir vaqtning o'zida jami o'n marta oldinga siljish orqali amalga oshirilishi mumkin. Biroq, aniq tasodifiy kirish iteratorlariga ega bo'lish samaradorlik afzalliklarini beradi. Masalan, vektor tasodifiy kirish iteratoriga ega bo'ladi, lekin ro'yxatda faqat ikki yo'nalishli iterator bo'ladi. Iteratorlar STL umumiyligini ta'minlaydigan asosiy xususiyatdir. Masalan, ketma-ketlikni teskari o'zgartirish algoritmi ikki tomonlama iteratorlar yordamida amalga oshirilishi mumkin, keyin esa xuddi shu dastur ro'yxatlar, vektorlar va deklar uchun ishlatilishi mumkin . Foydalanuvchi tomonidan yaratilgan konteynerlar faqat beshta standart iterator interfeysidan birini amalga oshiradigan iteratorni taqdim etishi kerak va STLda taqdim etilgan barcha algoritmlar konteynerda ishlatilishi mumkin. Bu umumiylik ham ba'zida qimmatga tushadi. Misol uchun, xarita yoki to'plam kabi assotsiativ konteynerda qidiruvni amalga oshirish, konteynerning o'zi taklif qiladigan a'zo funktsiyalarini chaqirishdan ko'ra, iteratorlar yordamida ancha sekinroq bo'lishi mumkin. Buning sababi shundaki, assotsiativ konteyner usullari iteratorlar yordamida algoritmlar uchun noaniq bo'lgan ichki tuzilish haqidagi bilimlardan foydalanishi mumkin. STL funksiya chaqiruv operatorini ( ) ortiqcha yuklaydigan sinflarni o'z ichiga oladi . Bunday sinflarning misollari funktorlar yoki funksiya ob'ektlari deb ataladi . Funktorlar bog'langan funktsiyaning harakatini parametrlashtirishga imkon beradi (masalan, funktor konstruktoriga argumentlar orqali ) va funktsiya bilan birlashtirilgan har bir funktsiya holati haqidagi ma'lumotni saqlash uchun ishlatilishi mumkin. Funktorlar va funktsiya ko'rsatkichlari funksiya chaqiruvining sintaksisi yordamida chaqirilishi mumkinligi sababli, mos parametr faqat funktsiya chaqiruvi kontekstlarida paydo bo'lganda, ular shablonlarga argument sifatida almashtirilishi mumkin. Download 27.63 Kb. Do'stlaringiz bilan baham: |
1 2
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling