Shablonlar (Templates): Umumiy dasturlash va standart andozalar kutubxonasi (stl)


Download 27.63 Kb.
bet2/2
Sana14.11.2023
Hajmi27.63 Kb.
#1772185
1   2
Bog'liq
Shablonlar(Templates)

operator()
Funktorning ayniqsa keng tarqalgan turi predikatdir . Masalan, algoritmlar ketma-ketlik elementlarida ishlaydigan unarfind_if predikatni oladi . Tartiblash, qisman_sort, nth_element va barcha tartiblangan konteynerlar kabi algoritmlar ikkilik predikatdan foydalanadi , u qat'iy zaif tartibni ta'minlashi kerak , ya'ni u o'tish, refleksiv bo'lmagan va assimetrik ikkilik munosabatda a'zolik testi kabi harakat qilishi kerak . Agar hech biri ta'minlanmagan bo'lsa, bu algoritmlar va konteynerlar sukut bo'yicha kamroq foydalanadi , bu esa o'z navbatida < kamroq operatorini chaqiradi
C++ kompilyatorining amalga oshirish sifati (QoI) STL (va umuman shablonli kod) dan foydalanishga katta ta'sir ko'rsatadi:

  • Shablonlar bilan bog'liq xato xabarlari odatda juda uzoq va shifrlash qiyin. Bu muammo shu qadar jiddiy deb hisoblanganki, STL bilan bog'liq xato xabarlarini tushunarli qilish uchun ularni soddalashtiradigan va chiroyli chop etadigan bir qator vositalar yozilgan .

  • Shablonlardan ehtiyotsiz foydalanish kod shishishiga olib kelishi mumkin. Bunga STL ilovalaridagi maxsus texnikalar (masalan, ichkarida void* konteynerlaridan foydalanish va boshqa "diet shablonlari" texnikasi) va kompilyatorlarni optimallashtirish usullarini takomillashtirish orqali qarshi olindi. Biroq, bu alomat boshqa turdagi bilan ishlash uchun funktsiyalar to'plamini sodda tarzda qo'lda nusxalashga o'xshaydi, chunki ehtiyotkorlik va yaxshi texnika bilan ikkalasidan ham qochish mumkin.

  • Shablonni yaratish odatda qaror qabul qilish vaqtini qisqartirish evaziga kompilyatsiya vaqtini va xotiradan foydalanishni oshirishi mumkin (masalan, virtual funktsiyalar orqali). Kompilyator texnologiyasi yetarli darajada yaxshilanmaguncha, bu muammoni faqat ehtiyotkor kodlash, ba'zi idiomalardan qochish va shablonlarni mos bo'lmagan yoki kompilyatsiya vaqtining ishlashi ustuvor bo'lgan joylarda ishlatmaslik orqali qisman bartaraf etish mumkin

  • Manba kodidagi konstantalar bilan STL konteynerlarini ishga tushirish C dan meros bo'lib o'tgan ma'lumotlar tuzilmalari kabi oson emas ( C++ 11 da ishga tushiruvchi ro'yxatlar bilan manzillangan ).

  • STL konteynerlari asosiy sinflar sifatida foydalanish uchun mo'ljallanmagan (ularning destruktorlari ataylab virtual emas); konteynerdan olish keng tarqalgan xatodir.

  • STL tomonidan amalga oshirilgan iteratorlar tushunchasini dastlab tushunish qiyin bo'lishi mumkin: masalan, agar iterator tomonidan ko'rsatilgan qiymat o'chirilsa, iteratorning o'zi endi haqiqiy emas . Bu xatolarning keng tarqalgan manbai. Ko'pgina STL ilovalari sekinroq disk raskadrovka rejimini ta'minlaydi, ammo agar foydalanilsa, bunday xatolarni topishi mumkin. Shunga o'xshash muammo boshqa tillarda ham mavjud, masalan Java . Diapazonlar iteratorlarga nisbatan xavfsizroq, moslashuvchan muqobil sifatida taklif qilingan

  • Ba'zi iteratsiya naqshlari STL iterator modeliga mos kelmaydi STL modeliga moslashtirib bo'lmaydi

  • Kompilyatorning muvofiqligi konteynerlar uchun xotirani boshqarish uchun ishlatiladigan Allocator ob'ektlari holatga bog'liq xatti-harakatlar bilan ishlashiga kafolat bermaydi . Misol uchun, ko'chma kutubxona o'sha turdagi turli ajratuvchi ob'ektlardan foydalangan holda turli hovuzlardan xotirani tortib oladigan ajratuvchi turini aniqlay olmaydi. (Meyers, 50-bet) ( C++11 da murojaat qilingan ).

  • Algoritmlar to'plami to'liq emas: masalan, algoritm C++ 11 da qo'shilgan bo'lsa ham copy_if tashlab qo'yilgan .

Download 27.63 Kb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling