Oldingi Mundarija Keyingi Standart shablon kutubxonasi (stl)


Download 17.85 Kb.
Sana16.12.2021
Hajmi17.85 Kb.
#181273
Bog'liq
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 i2, i1> = i2

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 qiymati bilan bog'langan kalit / qiymat juftlarini saqlash uchun assotsiativ ro'yxat

multimap - har bir tugmachada ikkita yoki undan ortiq qiymati mavjud

to'siq - ni o'rnating

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 > sinf std :: vektor

{

// ...


};

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 & ob'ekt);

shablon vektor (InIter start, InIter end,

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 a;

vektor x (5);

vektor c (5, '*');

vektor b (a); // b = a

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 - sarlavhasi yordamida amalga oshiriladi .

#include

#include

nom maydonidan foydalanib std;

int main (void)

{

vektor v;



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 v;



for (int i = 0; i <10; i ++)

{

v.push_back (i);



}

cout << "size =" << v.size () << "\ n";

vektor :: iterator p = v.begin ();

while (p! = v.end ())

{

cout << * p << "";



p ++;

}

return 0;



}

Elementlarni kiritish va olib tashlash

#include

#include

nom maydonidan foydalanib std;

int main (void)

{

vektor v (5, 1);



// uchun chiqish

(int i = 0; i <5; i ++)

{

cout << v [i] << "";



}

cout << endl;

vektor :: iterator p = v.begin ();

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 (3);



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 & ob);

andoza map (InIter first, InIter last, const Comp & c = Comp (),

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 Allocator = spreadator >

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 aniqlanadi .

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;

}

};

Shuningdek, STL interfeysni kerakli darajaga o'zgartiradigan bir qator sinflar va funktsiyalarni (funktsiyalar) taklif etadi. Xususan, konteynerlar asosida stackni amalga oshiradigan stack adapter mavjud. Masalan, ikkilik funktsiyani unary funktsiyasiga adapterini ko'rib chiqing (hozirgi vaqtda ushbu funktsiya C ++ standartida eskirgan deb e'lon qilingan):



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);

}

};

O'z-o'zini o'qish uchun



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'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling