Oldingi Mundarija Keyingi Standart shablon kutubxonasi (stl)
Download 17.85 Kb.
|
stl 2020
Oldingi Mundarija Keyingi Standart shablon kutubxonasi (STL). STL eng mashhur va keng qo'llaniladigan algoritmlar va ma'lumotlar tuzilmalarini amalga oshiradigan umumiy maqsadlarni, standart sinflarni va funktsiyalarni taqdim etadi. STL sinf shablonlari ustiga qurilgan va shuning uchun uning algoritmlari va tuzilmalari deyarli barcha ma'lumotlar turlariga mos keladi. Kutubxonaning yadrosi uchta elementdan iborat: konteynerlar, algoritmlar va iteratorlar. Konteynerlar - bu boshqa narsalarni saqlash uchun moslamalar. Masalan, vektor, chiziqli ro'yxat, to'plam. Assotsiativ konteynerlar kalitlarda ular ichida saqlanadigan qiymatlarga tezda kirish imkonini beradi. Har bir konteyner sinfida ular bilan ishlash funktsiyalari to'plami mavjud. Masalan, ro'yxatda elementlarni kiritish, yo'q qilish va birlashtirish funktsiyalari mavjud. Algoritmlar (algoritmlar) konteyner tarkibidagi operatsiyalarni bajaradi. Konteynerlarning tarkibini boshlash, saralash, qidirish, almashtirish algoritmlari mavjud. Ko'plab algoritmlar ketma-ketlik bilan ishlashga mo'ljallangan, bu konteyner ichidagi narsalarning chiziqli ro'yxati. Iteratorlar - bu idishga ko'rsatgich vazifasini bajaradigan ob'ektlar. Ular konteyner tarkibiga massiv elementlariga kirish uchun ko'rsatgichlar ishlatilgandek kirish imkoniyatini beradi. Ko'rsatkichlar bilan bir xil tarzda iteratorlar bilan ishlashingiz mumkin. Siz ularga operatsiyalarni *, oshirish, kamaytirishni qo'llashingiz mumkin. Takrorlovchi turi har xil konteynerlarda aniqlangan turini takrorlovchi e'lon qiladi. Besh turdagi iteratorlar mavjud: Kiritish iteratorlari tenglik, ajratish va oshirish operatsiyalarini qo'llab-quvvatlaydi. == ,! =, * i, ++ i, i ++, * i ++ Kirish iteratorining maxsus holati istream_iterator . Chiqish iteratorlari faqat topshiriqning chap tomonida ruxsat berilgan ajratish operatsiyalarini qo'llab-quvvatlaydi va o'sish. ++ i, i ++, * i = t, * i ++ = t Chiqish iteratorining maxsus holati ostream_iterator . Bir yo'nalishli iteratorlar (oldinga yo'naltiruvchilar) barcha I / U iterator operatsiyalarini qo'llab-quvvatlaydi va shuningdek, cheksiz tayinlashga imkon beradi. == ,! =, =, * i, ++ i, i ++, * i ++ Ikki yo'nalishli iteratorlar oldinga yo'naltirilgan iteratorlarning barcha xususiyatlariga ega va qo'shimcha ravishda kamaytiruvchi operatsiyaga ega ( --i , i-- , * i-- ), bu ularga konteynerni har ikki yo'nalishda aylanib o'tishga imkon beradi. Tasodifiy kirish iteratorlari ikki yo'nalishli iteratorlarning barcha xususiyatlariga ega, shuningdek, taqqoslash va arifmetik amallarni, ya'ni indeks bo'yicha to'g'ridan-to'g'ri kirishni qo'llab-quvvatlaydi. i + = n, i + n, i - = n, i - n, i1 - i2, i [n], i1 STL teskari iteratorlarni ham qo'llab-quvvatlaydi. Teskari iteratorlar ikki yo'nalishli iteratorlar yoki tasodifiy kirish iteratorlari bo'lishi mumkin, ammo ketma-ketlikni teskari yo'nalishda bosib o'tishadi. Konteynerlar, algoritmlar va iteratorlardan tashqari, STL yana bir nechta standart komponentlarni qo'llab-quvvatlaydi. Bular orasida bosh xotira ajratgichlari, predikatlar va taqqoslash funktsiyalari mavjud. Har bir konteynerda konteyner uchun ajratish jarayonini boshqaradigan maxsus ajratuvchi mavjud. Odatiy ajratuvchi sinf taqsimlovchisining ob'ekti hisoblanadi. Siz o'zingizning distribyutoringizni belgilashingiz mumkin. Ba'zi algoritmlar va konteynerlarda predikat deb ataladigan maxsus funktsiya turi qo'llaniladi. Predikat bir yoki ikkilik bo'lishi mumkin. Qaytgan qiymat: true yoki false. U yoki bu qiymatni olishning aniq shartlari dasturchi tomonidan belgilanadi. Unary predikat turi UnPred , ikkilik - BinPred . Argumentlar turi idishda saqlanadigan ob'ektlar turiga mos keladi. Ikki elementni taqqoslash uchun ikkilik predikatning maxsus turi aniqlanadi. Bunga taqqoslash funktsiyasi deyiladi. Agar birinchi element ikkinchisidan kichik bo'lsa, funktsiya haqiqiy bo'ladi. Funktsiya turi Comp . STL-da funktsiya ob'ektlari alohida rol o'ynaydi. Funktsiya moslamalari - bu qavslar () amallari aniqlangan sinfning misollari . Ba'zi hollarda funktsiyani funktsiya ob'ekti bilan almashtirish qulay. Funksiya ob'ekti funktsiya sifatida ishlatilganda () operator uni chaqirish uchun ishlatiladi . class less { public:
bool operator () (int x, int y) { return x }; STL ikkita konteyner turini belgilaydi: ketma-ketlik va assotsiativ. Standart konteynerlarning asosiy g'oyasi shundaki, ular mantiqan bir-birining o'rnini bosishi kerak. Foydalanuvchi samaradorlikni hisobga olgan holda va ixtisoslashtirilgan operatsiyalarga bo'lgan ehtiyoj asosida ularning orasidan birini tanlashi mumkin. Masalan, agar siz tez-tez kalit bilan qidirishingiz kerak bo'lsa, siz xaritadan (assotsiativ qator) foydalanishingiz mumkin . Boshqa tomondan, agar ro'yxatga xos operatsiyalar ustunlik qilsa, siz ro'yxat konteyneridan foydalanishingiz mumkin . Agar narsalarni qo'shish va olib tashlash ko'pincha idishning uchida amalga oshirilsa, navbat , ikki tomonlama deque , stackdan foydalanishni o'ylashingiz kerak... Odatiy bo'lib, foydalanuvchi vektordan foydalanishi kerak ; eng keng ko'lamli vazifalar uchun yaxshi ishlash uchun amalga oshiriladi. Turli xil konteynerlar va umuman, barcha turdagi axborot manbalari bilan ishlash g'oyasi - yagona usulda umumiy dasturlash tushunchasiga olib keladi. STL ushbu g'oyani qo'llab-quvvatlash uchun ko'plab umumiy algoritmlarni o'z ichiga oladi. Bunday algoritmlar dasturchini alohida idishlarning tafsilotlarini bilishdan xalos qiladi. STL quyidagi konteyner sinflarini belgilaydi (ushbu sinflar aniqlangan sarlavha fayllari burchakli qavsda ko'rsatilgan): bitset - bitlar to'plami vektor - dinamik vektor ro'yxat - chiziqli ro'yxat deque - deque stack - stack navbat - navbat ustuvorlik_ navbat - ustuvor navbat xarita - har bir kalit bitta multimap - har bir tugmachada ikkita yoki undan ortiq to'siq - multiset - har bir element mutlaqo noyob bo'lmagan to'plamdir Turlari: value_type - element turi arrangor_type - xotira ajratuvchi turi size_type - indekslar turi, ma'lumotlar soni va boshqalar. iterator - value_type * kabi o'zini tutadi reverse_iterator konteynerni teskari tartibda yuradi mos yozuvlar - value_type & kabi ishlaydi key_type - kalit turi (faqat assotsiativ konteynerlar uchun) key_compare - taqqoslash mezonining turi (faqat assotsiativ konteynerlar uchun) mapped_type - moslashtirilgan qiymat turi Iteratorlar: begin () - birinchi elementga ishora qiladi end () - oxirgisidan keyingi elementga ishora qiladi rbegin () - teskari tartibda birinchi elementga ishora qiladi rend () - teskari tartibda oxirgisidan keyingi elementga ishora qiladi Elementga kirish: front () - birinchi elementga havola orqaga () - oxirgi elementga havola operator [] (i) - tekshiruvsiz indeks bo'yicha kirish at (i) - chek bilan indeksga kirish Yoqish elementlari: insert (p, x) - p ga ishora qilingan elementdan oldin x ni qo'shish insert (p, n, x) - p dan oldin x ning n nusxasini qo'shing insert (p, first, last) - elementlarni [ first : last ] dan oldin p push_back (x) - oxiriga x qo'shing push_front (x) - yangi birinchi elementni qo'shing (faqat ikkita uchi bo'lgan ro'yxatlar va navbatlar uchun) Elementlarni olib tashlash pop_back () - oxirgi elementni olib tashlash pop_front () - birinchi elementni olib tashlash (faqat ikkita uchi bo'lgan ro'yxatlar va navbatlar uchun) o'chirish (p) - elementni p holatida o'chirish erase (first, last) - elementlarni [ first : last ] dan olib tashlash aniq () - barcha elementlarni olib tashlang Boshqa operatsiyalar size () - elementlar soni empty () - Idish bo'shmi? hajmi () - vektor uchun ajratilgan xotira (faqat vektorlar uchun) rezerv (n) - n ta element uchun konteyner uchun xotirani ajratadi resize (n) - konteyner hajmini o'zgartiradi ( faqat vektorlar, ro'yxatlar va ikki tomonlama navbat uchun) almashtirish (x) - ikkita konteynerning joylarini almashtirish == , ! = , < Solishtirish operatsiyalar Topshiriq operatsiyalari operator = (x) - konteynerga x elementlari beriladi tayinlash (n, x) - x elementlarning n nusxalarini konteynerga berish (assotsiativ konteynerlar uchun emas) assigned (first, last) - elementlarning diapazoni [ first : last ] Assotsiatsiya operatsiyalari operator [] (k) - k tugmachasi bilan elementga kirish find (k) - k kaliti bo'lgan elementni topadi lower_bound (k) - k tugmachasi bilan birinchi elementni topadi upper_bound (k) - k dan kattaroq birinchi elementni topadi equal_range (k) - elementlarning pastki_bound va yuqori_boundlarini k tugmasi bilan topadi STL dagi vektor indeks bo'yicha elementlariga kirish imkoniyatiga ega bo'lgan dinamik qator sifatida tavsiflanadi. shablon { // ...
}; bu erda T - saqlanadigan ma'lumotlar turi. Allocator standart xotira ajratuvchisini belgilaydi. Vektor sinfi quyidagi konstruktorlarni aniqlaydi: aniq vektor (const Allocator & a = Allocator ()); aniq vektor (size_type number, const T & value = T (), const Allocator & a = Allocator ()); vektor (const vektor shablon const Allocator & a = Allocator ()); Birinchi shakl bo'sh vektor konstruktoridir. Vektorli konstruktorning ikkinchi shaklida elementlar soni raqam bo'lib, har bir element qiymatdan qiymatga teng. Parametr qiymati standart qiymat bo'lishi mumkin. Vektorli konstruktorning uchinchi shakli nusxa ko'chirish konstruktoridir. To'rtinchi shakl - bu boshlang'ich va oxirgi iteratorlar tomonidan belgilangan elementlar doirasini o'z ichiga olgan vektorning konstruktori. vektor vektor vektor vektor Vektorda saqlanadigan har qanday ob'ekt uchun standart konstruktor aniqlanishi kerak. Bundan tashqari, ob'ekt uchun < va == operatorlari aniqlanishi kerak . Vektorli sinf uchun quyidagi taqqoslash operatorlari aniqlangan: ==, <, <= ,! =,>,> =. Bundan tashqari, vektor sinfi uchun indeks operatori [] aniqlanadi . Insert () , push_back () , resize () , assigned () funktsiyalari yordamida yangi elementlarni kiritish mumkin . Mavjud elementlari yordamida ketkazilishi mumkin o'chirish () , pop_back () , qayta o'lchamlarini () , ochiq-oydin () funktsiyalari . Individual elementlari orqali foydalaniladi boshlanadi () , oxiri () , ) (rbegin , ko'chirmoq () iterators . Konteynerni manipulyatsiya qilish, saralash, qidirish va shunga o'xshash narsalar global fayl funktsiyalari - #include #include nom maydonidan foydalanib std; int main (void) { vektor for (int i = 0; i <10; i ++) { v.push_back (i); } cout << "size =" << v.size () << "\ n"; for (int i = 0; i <10; i ++) { cout << v [i] << ""; } cout << endl; uchun (int i = 0; i <10; i ++) { v [i] = v [i] + v [i]; } uchun (int i = 0; i {
cout << v [i] << ""; cout << endl; qaytish 0; Vektorga iterator orqali kirish #include #include nom maydonidan foydalanib std; int main (void) { vektor for (int i = 0; i <10; i ++) { v.push_back (i); } cout << "size =" << v.size () << "\ n"; vektor while (p! = v.end ()) { cout << * p << ""; p ++; } return 0; } Elementlarni kiritish va olib tashlash #include #include nom maydonidan foydalanib std; int main (void) { vektor // uchun chiqish (int i = 0; i <5; i ++) { cout << v [i] << ""; } cout << endl; vektor p + = 2; // qiymati 9 v.insert bo'lgan 10 ta elementni joylashtiring (p, 10, 9); // chiqish p = v.begin (); while (p! = v.end ()) { cout << * p << ""; p ++; } // kiritilgan elementlarni olib tashlash p = v.begin (); p + = 2; v.erase (p, p + 10); // xulosa p = v.begin (); while (p! = v.end ()) { cout << * p << ""; p ++; } return 0; } Vektor maxsus sinf ob'ektlarini o'z ichiga oladi #include #include #include " student.h " nom maydonidan foydalanib std; int main (void) { vektor v [0] = TALABA ("Ivanov", 45.9); v [1] = TALABA ("Petrov", 30.4); v [0] = TALABA ("Sidorov", 55.6); // uchun chiqish (int i = 0; i <3; i ++) { cout << v [i] << ""; } cout << endl; qaytish 0; } Assotsiativ massiv juft qiymatlarni o'z ichiga oladi. Kalit deb nomlangan bitta qiymatni bilsak, biz xaritalangan qiymat deb nomlangan boshqasiga kirishimiz mumkin. Assotsiativ massivni massiv deb hisoblash mumkin, buning uchun indeks tamsayıli turga ega bo'lishi shart emas: V & operator [] (K const &) uchun mos yozuvlar qaytaradi V , tegishli K . Assotsiativ konteynerlar assotsiativ massiv tushunchasini umumlashtirishdir. Xarita assotsiativ konteyner - bu kalit yordamida qiymatni tezda olishni ta'minlaydigan (kalit, qiymat) juftliklar ketma-ketligi. Xarita konteynerida ikki yo'nalishli iteratorlar mavjud. Xarita assotsiativ konteyner asosiy turlari uchun < operatsiyasini talab qiladi . U o'z elementlarini kalit bo'yicha tartiblangan holda saqlaydi, shunda u tartibda takrorlanadi. Xarita sinfi uchun shablon spetsifikatsiyasi : andoza class Allocator = ajratuvchi > class std :: map; Xarita sinfi quyidagi konstruktorlarni aniqlaydi: aniq xarita (const Comp & c = Comp (), const Allocator & a = Allocator ()); xarita (const xaritasi andoza const Allocator & a = Allocator ()); Birinchi shakl bo'sh assotsiativ konteyner uchun konstruktor, ikkinchisi nusxa ko'chirish konstruktori, uchinchisi bir qator elementlarni o'z ichiga olgan assotsiativ konteyner uchun konstruktor. Belgilash jarayoni aniqlanadi: map & operator = (const map &); Quyidagicha belgilangan: == , < , <= , ! = , > , > = . Map ob'ekti sifatida bunday saqlaydi kalit / sazovor juft juft . Siz kalit / qiymat juftlarini nafaqat juftlik sinfining konstruktorlari yordamida , balki parametrlar sifatida ma'lumotlar turlaridan foydalangan holda turdagi juftlik ob'ektlarini yaratadigan make_pair funktsiyasidan foydalanib yaratishingiz mumkin . Assotsiativ konteyner uchun odatiy operatsiya - bu indeks ( [] ) operatsiyasi yordamida assotsiativ qidirish . mapped_type & operator [] (const key_type & K); Bir ko'pchilik to'plami biz sizning tugmalar kuzatib shunday qadriyatlar, ahamiyatsiz bo'lgan biriktirilishi mumkin, tillo, deb qaralishi mumkin. shablon class std :: set { // ...
}; To'plam, assotsiativ massiv singari, T turi uchun ( < ) dan kam operatorni mavjud bo'lishini talab qiladi. U o'z elementlarini takrorlashni tartibda bajarilishi uchun tartiblangan holda saqlaydi. Har bir algoritm funktsiya shabloni yoki funktsiya shablonlari to'plami bilan ifodalanadi. Shunday qilib, algoritm har xil turdagi qiymatlarni o'z ichiga olgan juda xilma-xil konteynerlar bilan ishlashi mumkin. Takrorlagichni qaytaradigan algoritmlar odatda xato ketma-ketligi to'g'risida xabar berish uchun kirish ketma-ketligining oxiridan foydalanadi. Algoritmlar ularning kiritilishi va chiqishini oraliq tekshirishni amalga oshirmaydi. Algoritm iteratorni qaytarganda, u kirish bilan bir xil turdagi iterator bo'ladi. STL-dagi algoritmlar ob'ektlarni ko'rib chiqish, saralash, izlash, qo'shish va o'chirish kabi keng tarqalgan umumiy konteyner operatsiyalarini amalga oshiradi. Algoritmlar sarlavha faylida Quyida eng ko'p ishlatiladigan STL algoritm funktsiyalarining ba'zilari keltirilgan. O'zgartirilmaydigan operatsiyalar. for_earch () - ketma-ketlikning har bir elementi uchun operatsiyalarni bajaradi find () - ketma-ketlikda qiymatning birinchi paydo bo'lishini topadi find_if () - ketma-ketlikdagi predikatning birinchi mosligini topadi () - ketma-ketlikdagi qiymatning takrorlanish sonini hisoblaydi () - predikat ketma-ketlikda necha marta bajarilishini hisoblaydi. search () - ketma-ketlikning birinchi paydo bo'lishini ketma-ketlik sifatida topadi search_n () - ketma-ketlikdagi qiymatning n-chi paydo bo'lishini topadi Amallarni o'zgartirish. ) (nusxa - natija birinchi element boshlab nusxalarini ayriboshlash () - swap ikki element () o'rniga belgilangan qiymati bilan elementlarini o'rnini - replace_if () predicate ijro elementlar o'rnini - replace_copy () belgilangan qiymati bilan elementlarni almashtirish, nusxalari ketma-ketlikni - replace_copy_if () - ketma-ketlikni nusxa ko'chiradi, to'ldirish () predikati bajarilganda elementlarni almashtiradi - barcha elementlarni berilgan qiymat bilan almashtiradi olib tashlash () - berilgan qiymat bilan elementlarni olib tashlaydi Remove_if () - predikativ olib tashlanganida elementlarni olib tashlaydi ()- ketma-ketlikni nusxa ko'chiradi, belgilangan qiymatga ega elementlarni olib tashlaydi remove_copy_if () - ketma-ketlikni nusxa ko'chiradi, teskari () predikat bajarilganda elementlarni olib tashlaydi - elementlarning tartibini teskari o'zgartiradi () - tasodifiy bir xil taqsimotga muvofiq elementlarni harakatga keltiradi ("ketma-ketlikni aralashtiradi") konvertatsiya () - ketma-ketlikning har bir elementida ko'rsatilgan operatsiyani bajaradi noyob () - teng qo'shni elementlarni olib tashlaydi unique_copy () - ketma-ketlikni nusxalash, teng qo'shni elementlarni o'chirish Tartiblash. Saralash () - yaxshi o'rtacha samaradorligi bilan ketma-ketlikni tartiblaydi partial_sort () - oqibat qismini tartiblaydi stable_sort () - teng unsurlar tartibini saqlab ketma-ketlikni tartiblaydi LOWER_BOUNDdan () - tartib natija bir qiymati Birinchi o'tgan topadi UPPER_BOUND () - birinchi element dan ko'proq topadi berilgan qiymat binary_search () - berilgan elementning tartiblangan ketma-ketlikda bo'lishini belgilaydi birlashtirish () - ikkita tartiblangan ketma-ketlikni birlashtiradi To'plamlar bilan ishlash. o'z ichiga oladi () - paydo bo'lishini tekshirish set_union () - to'plamlarning birlashishi set_intersection () - to'plamlarning kesishishi set_difference () - to'plamlar farqi Kamchiliklar va balandliklar. min () - ikkitadan kichikroq () - ikkitadan kattaroq min_element () - ketma-ketlikdagi eng kichik qiymat max_element () - ketma-ketlikdagi eng katta qiymat Permutatsiyalar. next_permutation () - leksikografik tartibda navbatdagi almashtirish prev_permutation () - leksikografik tartibda oldingi almashtirish Oldingi Mundarija Keyingi Yangi yilni ko'chirish mkroitor
2019 yil 12-yanvar, soat 01:33 da Asosiy C ++ standart kutubxona tushunchalari C ++ Ushbu maqola C ++ standart kutubxonasining asosiy tushunchalarini belgilaydi. Kelajakda ma'lumot uchun taqdim etiladi. C ++ standart kutubxonasining eng katta qismi STL (Standard Template Library) kutubxonasidir. STL tarkibida beshta asosiy komponent mavjud: konteyner : xotiradagi ob'ektlar to'plamini boshqaradi. iterator : konteyner tarkibiga kirish algoritmi uchun vositani taqdim etadi. algoritm : hisoblash tartibini belgilaydi. funktsiya ob'ekti : Boshqa tarkibiy qismlar tomonidan foydalanish uchun ob'ektdagi funktsiyani kapsulaga soladi. adapter (adapter) : komponentni boshqa interfeys bilan ta'minlash uchun moslashtiradi. Barcha komponentlar bir qator talablarni qondiradi, shuning uchun ular bir-biriga yaxshi mos keladi. Konteyner ta'rifidan kelib chiqadiki, har qanday foydalanuvchi tomonidan aniqlangan ma'lumotlar tuzilishi konteyner hisoblanadi. Bizning holatlarimizda konteynerlar ro'yxat, vektor, xarita va boshqalar kabi standart ma'lumotlar tuzilmalaridir . Konteynerlarga rasmiy talablar juda keng, ammo asosiysi bu elementlarga kirish qoidasidir. Idishning elementlariga maxsus ob'ektlar - iteratorlar orqali kirish mumkin(pastga qarang). Siz konteyner elementlari xotirada qanday joylashganligini bilmasligingiz mumkin, lekin siz aniq bilasizki, iteratorlar ketma-ket takrorlanishi mumkin va ularning har biri elementga kirish imkoniyatini beradi. Birinchi elementga ishora qiluvchi iteratorni start () usuli yordamida olish mumkin ; idish. Oxirgi elementga ishora qiluvchi iteratorni end () usuli yordamida olish mumkin ; idish. Boshqacha qilib aytganda, iteratorlar yarim intervalda (yoki yarim- segment) joylashgan bo'lib, uni rasmiy ravishda [boshlash, tugatish] shaklida yozish mumkin. Konteyner deklaratsiyasiga misol: struct a_container { struct an_iterator; an_iterator begin(); an_iterator end(); }; Kutilayotgan C ++ 20 standartida yarim intervallarni - diapazonlarni kapsulyatsiya qiluvchi strukturadan foydalanish taklif etiladi Takrorlovchi - bu konteyner elementlariga kirishni ta'minlaydigan va ularning ustida takrorlanishiga imkon beradigan ob'ekt. Takrorlovchi - bu konteynerning o'ziga xos xususiyati. C ++ standart kutubxonasining birinchi dasturlarida iterator konteyner elementiga ko'rsatgich sifatida amalga oshirildi. Zamonaviy dasturlarda bu ko'rsatkichni konteyner ob'ektiga joylashtiradigan sinfdir. Takrorlagichlarga qo'yiladigan asosiy talablar - ajratish va o'sish operatorlarining mavjudligi. Quyida iterator bilan konteyner e'lon qilingan. template struct a_container { struct an_iterator { void operator++(); TYPE& operator*(); }; an_iterator begin(); an_iterator end(); }; Algoritmning standartiga qaraganda yaxshiroq ta'rif berolmayman: algoritm - bu kerakli natijaga cheklangan sonli bosqichga olib boradigan harakatlar ketma-ketligi . STL holatida algoritmlar shablon funktsiyalari bilan amalga oshiriladi, ular iterator intervallarini kirish parametrlari sifatida qabul qiladi. Ushbu algoritmlarning umumiy imzosi quyidagicha tavsiflanadi: template RESULT an_algorithm(ITERATOR first, ITERATOR last, ...); Siz () operatorini sinf deklaratsiyasida bekor qilishingiz mumkin. Agar bu operator sinfda qayta aniqlangan bo'lsa, u holda bu sinf ob'ektlari funktsiyalarning xususiyatlarini oladi (ular funktsiyalar sifatida ishlatilishi mumkin). Bunday ob'ektlar funktsional yoki funktsiyalar deb nomlanadi . Funksiyalar funktsiyani "xotirasi" ga kerak bo'lganda, shuningdek funktsiyalar uchun ko'rsatgichlarni almashtirish uchun foydalidir. C ++ 11 standartidan beri funktsiyalar - lambda funktsiyalari uchun stenografiya imkoniyati mavjud. Funktsiyalar uchun maxsus talablar mavjud emas. Ba'zan tashqari, funktsiya funktsiyasidan meros qilib olishingiz kerak bo'lishi mumkin (C ++ 11 standartigacha - unary_function yoki binary_function). Funktsiyani amalga oshirishning kichik namunasi: template struct plus{ TYPE operator ()(const TYPE& p1, const TYPE& p2) const{ return p1 + p2; } };
template class bind1st { BIDIRECTIONAL_FUNCTION _bf; TYPE _first; public: bind1st(BIDIRECTIONAL_FUNCTION bf, TYPE first): _bf(bf), _first(first) {} TYPE operator()(const TYPE& p) const { return _bf(_first, p); } };
Github-da C ++ 20 standart loyihasi C ++ ma'lumotnomasi C ++ dasturlarini ishlab chiqish Standart uchun vange-v3 taklifi Teglar: c ++
STL Uyalar:
C ++ +9 186 4 Muharrir dayjesti Oyiga bir marta eng yaxshi maqolalarni yuboramiz Elektron pochta Maykl Kroytor @mcroitor IC integratori Izohlar 4 SHUNGA O'XSHASH NASHRLAR 2018 yil 24-yanvar, soat 01:34 da Parallel STL. C ++ STL kodini tezlashtirishning tezkor usuli +22 16,6 ming 77 7 2013 yil 1-fevral soat 16:04 da C ++ STL yaratuvchisi bilan intervyu, 1995 yil 3-qism +29
10,3 ming 63 3 2013 yil 27 yanvar, soat 16: 11da C ++ STL yaratuvchisi bilan intervyu, 1995 yil 2-qism +45 15,5 ming 82 to'qqiz
BIROZ E'TIBOR To'plam
Ma'lumotlar kutubxonasi: Data Science haqidagi qiziqarli habrapostlar to'plami Megatest
Поймай всех зловредов, или они поймают тебя. Тест по ИБ Мегатест
Съешь ещё этих мягких булок, да тест на логику пройди ВАКАНСИИ
C++-программист от 80 000 ₽Singularis LabВолгоградМожно удаленно C++-программист от 60 000 ₽Singularis LabВолгоградМожно удаленно Программист C++/Qt от 100 000 до 180 000 ₽АМИКОНМоскваМожно удаленно C++-программист - техлид проекта от 100 000 ₽Singularis LabВолгоград Программист C++ / Python от 170 000 ₽L3 TechnologiesМоскваМожно удаленно Больше вакансий на Хабр Карьере ЛУЧШИЕ ПУБЛИКАЦИИ ЗА СУТКИ сегодня в 12:12 Biz mas'uliyatli savdo bo'yicha pudratchilarni nazorat qilamiz: DLP + UAMni amalga oshirish (sanoat josusligi, harakatlar jurnallari) +35 2.2k
23 6 bugun soat 11:18 da Ikki yillik Kubernetes ishlab chiqarishdan keyin Groferlarning xulosalari +31
1,9 ming 17 0 bugun soat 03:25 da Elbrus kompyuterlarining yangi yil mezonlari +29 7.1k
o'n sakkiz 57 bugun soat 13:00 da AltaVista tarixi va Internetning o'tmishini saqlab qolish +26
1.8k 6 4 bugun soat 15:59 da Stomatologiyada behushlik va sedasyon: xavfsizmi? Va bolalarmi? +21 1,9 ming
yigirma 12 Til sozlamalari Texnik yordam To'liq versiya © 2006–2020 " Habr " Download 17.85 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling