13.2. Konstruktorlar. Iteratorlar Ixtiyoriy sinf-konteyner ko‘rsatilmagan holda konstruktor va destruktorni
nusxalovchi konstruktorga ega. Masalan, vektor sinf-konteynerning konstruktori va
destruktori:
Ixtiyoriy obyekt uchun ko‘rsatilmagan holda konteynerda saqlanuvchi
konstruktor mavjud bo‘lishi shart. Undan tashqari, obyekt uchun < va == operatorlar
aniqlanish lozim.
Iteratorlar bilan ko‘rsatkichlar kabi ishlash mumkin. Ularga *, inkrement,
dekrement operatorlarni qo‘llash mumkin. Iterator tipi sifatida har xil konteynerlarda
aniqlangan iterator tip elon qilinadi.
Iteratorlarning beshta tipi mavjud:
1. Kiritish iteratorlar (input_iterator) tenglik, nomini o‘zgartirish va inkrementa
operatsiyalarni qo‘llaydi.
==, !=, *i, ++i, i++, *i++
Kiritish iteratsiyasining maxsus xolati istream_iterator iborat.
2. Chiqarish iteratorlar (output_iterator) o‘zlashtirish operatorning chap tarafidan
imkon bo‘lgan isimning o‘zgartirish va inkrementa operatsiyalar qo‘llanadi.
++i, i++, *i=t, *i++=t
Chiqarish iteratsiyasining maxsus xolati ostream_iterator.
3.
Bitta
yo‘nalishdagi
iteratorlar
(forward_iterator)
kiritish/chiqarish
operatsiyalarning barchasini qo‘llaydi, bundan tashqari chegarasiz o‘zlashtirishning
imkonini beradi.
==, !=, =, *i, ++i, i++, *i++
4. Ikki yo‘nalishdagi iteratorlar (biderectional_iterator) forward-iteratorlarning
barcha xususiyatlariga ega, bundan tashqari, konteynerni ikkita yo‘nalishi bo‘yicha
o‘tish imkonini beradigan qo‘shimcha dekrementa (--i, i--, *i--) operatsiyasiga ega.
5. Ixtiyoriy ruxsatga ega bo‘lgan iteratorlar (random_access_iterator)
biderectional-iteratorlarning barcha xususiyatlariga ega, bundan tashqari solishtirish
va manzil arifmetikasi operatsiyalarni qo‘llaydi.
107
i+=n, i+n, i-=n, i-n, i1-i2, i[n], i1i2, i1>=i2
SHuningdek, STLda teskari iteratorlar (reverse iterators) qo‘llaniladi. Ketma-
ketlikni teskari yo‘nalishda o‘tuvchi ikki yo‘nalishli yoki ixtiyoriy ruxsatga ega
bo‘lgan iteratorlar teskari iteratoralar bo‘lishi mumkin.