Tiplarni dinamik tarzda aniqlash. Reja: Tiplarni dinamik tarzda aniqlash




Download 0,81 Mb.
bet28/143
Sana20.07.2024
Hajmi0,81 Mb.
#268096
1   ...   24   25   26   27   28   29   30   31   ...   143
Bog'liq
Tiplarni dinamik tarzda-fayllar.org


at() funksiyasi istisno qaytargani uchun try - catch funksiyasi bilan quyidagicha boshqarish mumkin:

map rat; try {


rat.at("U");
}
// istesnoni ushlab olish catch (std::out_of_range) {
// uni qayta ishlash


rat["U"] = 15;


}


Dastur fragmentida "U" kalitli juftlik topilmasa, uni yaratib, yangi qiymat beradi.
rat["U"] = 15; (hiyla, ruscha fishka) indekslash amali u faqat asosiy qiymatini olish emas, balki bu qiymatini o‘zgartirish mumkin degan maʻnoni anglatadi, bir qiymatini qaytaradi. Boshqacha qilib aytganda, ushbu dastur fragmenidagi amallarini bajarish mumkin:

rat["b1"]=1980;


cout << rat["b1"] << endl; rat["b1"] +=1;
cout << rat["b1"] << endl;
--rat["b1"];
cout << rat["b1"] << endl;


map, A = allocator
>> to‘plam pair tipidagi qiymatni saqlaydi. Bunda K kalit, tanlash imkonini beradi va T saqlanadigan qiymat. Shuning uchun iteratordan foydalangannimizda first kalit qiymatni va second saqlangan qiymatni qaytaradi, o‘zgartirish imkonini beradi. Yuqorida aytib o‘tilgandek operator[] asosiy amallardan hisoblanadi (vazifasini bilsangiz kerak). Agar map m bo‘lsa va m[k] = t maʻno jihatidan quyidagi fragmentga teng:

m.insert(make_pair(k, T())).first->second = t




Bu kabi elementlarni qo‘shish samarali hisoblanib, T obʻyektni yaratishga imkon bermaydi (yuqoridagi fragmentda aniq T() konstruktor chaqirilgan).
Agar operator[] noqulay va samarasiz deb hisoblasangiz, yana unga ikkita alternativ variantlar bor. Birinchisi find funksiyasidan foydalanib,kalit bo‘yicha (key, value) juftligiga mos iteratorni olish yoki kalit lug‘atda bo‘lmasa, end() funksiyadan foydalanish mumkin. Ikkinchisi at() funksiyasidan, yaʻni kalit asosida qiymatni qaytaradi. Agar kalit bo‘lmasa, istisno holatga o‘tadi.
Map sinfining umumiy shabloni quyidagicha:

template ,


template class Allocator = allocator>

Map sinfining operatorlari, xususiyatlari, funksiyalari va usullarini qo‘rib chiqamiz.

Typedef operatorlari :

typedef Key key_type;


typedef pair value_type; typedef Compare key_compare;
class value_compare
: public binary_function { friend class map;
protected:
Compare comp; value_compare(Compare c) : comp(c) {}
public:
bool operator()(const value_type& x, const value_type& y) { return comp(x.first, y.first);
}
};
typedef iterator; typedef const_iterator;
typedef Allocator::pointer pointer; typedef Allocator::reference reference;
typedef Allocator::const_reference const_reference; typedef size_type;
typedef difference_type; typedef reverse_iterator;
typedef const_reverse_iterator;


Xotirani ajratish va bo‘shatish (xolli qilish) operatorlari (allocation/deallocation):

map(const Compare& comp = Compare());


template

map(InputIterator first, InputIterator last, const Compare& comp = Compare());


map(const map& x);
~map();
map&
operator=(const map& x); void swap(map& x);


Download 0,81 Mb.
1   ...   24   25   26   27   28   29   30   31   ...   143




Download 0,81 Mb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Tiplarni dinamik tarzda aniqlash. Reja: Tiplarni dinamik tarzda aniqlash

Download 0,81 Mb.