7 ma’ruza. Chiziqli konteynerlar va ularni qo’llash. Reja
Download 23.97 Kb.
|
1 2
- Bu sahifa navigatsiya:
- 2. Diopazon haqida tushuncha.
- Massivli diapazonga misol: char data[] = "Hello, world!"; // Диапазон с 7-го элемента по 12-й содержит слово "world". auto
7 - MA’RUZA. CHIZIQLI KONTEYNERLAR VA ULARNI QO’LLASH. Reja: 1. Konteyner haqida tushuncha. 2. Diopazon haqida tushuncha. 3. Chiziqli konteynerlar. 4. Konteynerlarni qo’llash. Kalit so’zlar: Konteyner, diopazon, chiziqli konteynerlar, iterator. 1. Konteyner haqida tushuncha. Konteyner (container) - bu ob'ektlar bir xil turdagi qiymatlar to'plamini saqlashga qodir sinf ("massiv" tushunchasini umumlashtirish). Konteyner uning tarkibiga kirishni ta'minlaydi. C ++ standart kutubxonasida bu yordamchi elementlar iterator deb nomlangan massiv elementiga ko'rsatgich kontseptsiyasini umumlashtirishga asoslanadi. 2. Diopazon haqida tushuncha. Bir juft yineluvchi diapason (range) ni belgilaydi - bu juftlikni birinchi iterator ko'rsatgan birinchi elementdan boshlab, ikkinchisini oldinga siljitish orqali sanab o'tish mumkin bo'lgan qiymatlar ketma -ketligining ta'rifi. uchraydi, ketma -ketlikning oxirini bildiradi va qo'g'irchoq elementga ishora qiladi, go'yo oxirgi elementdan keyin ketma -ketlikda turadi. Bu ketma -ketlik konteyner, konteyner qismi, massiv, fayl bo'lishi mumkin yoki uni tezda yaratish mumkin. Massivli diapazonga misol: char data[] = "Hello, world!"; // Диапазон с 7-го элемента по 12-й содержит слово "world". auto begin = data + 7; // Начало диапазона -- первый итератор в паре. auto end = data + 12; // Конец диапазона -- второй итератор в паре. assert(end - begin == 5); // Расстояние между итераторами == количеству элементов в диапазоне. // Перечислим подряд все элементы диапазона. while (begin != end) cout.put(*begin++); // > world 3. Chiziqli konteynerlar. Yagona bog'langan ro'yxat insert_after - elementni kiritish; emplace_after - o'tkazilgan parametrlar uchun konstruktorni chaqirib, yangi element yaratish; erase_after - ob'ektni o'chirish. Before_begin va cbefore_begin funktsiyalari tomonidan qaytariladigan "birinchi elementdan oldin" qo'shimcha qo'g'irchoq pozitsiyasi mavjud (const_iteratorni qaytaradigan variant). Ob'ektlarni boshiga kiritish mumkin: fl.push_front (element) ni chaqirish ekvivalentdir fl.insert_after(fl.before_begin(), item) xuddi shunday fl.emplace_front (...) (bu erda ... element konstruktor parametrlarining ixtiyoriy to'plami) ga teng fl.emplace_after(fl.before_begin(), ...) Pop_front funktsiyasi ro'yxatning birinchi elementini olib tashlaydi. C ++ standart kutubxonasidagi ro'yxat konteynerlarining xususiyati yuqori darajadagi operatsiyalarni qo'llab-quvvatlashdir, bu operatsiyalarni amalga oshirish uchun faqat iteratorlardan samarali foydalanish mumkin emasligidan kelib chiqadi: merge - birlashtirilgan ikkita saralangan ro'yxatni bittaga birlashtiradi, elementlar nusxalanmaydi, lekin o'ng ro'yxatdan chapga o'tkaziladi; splice_after - o'tilgan ro'yxatni ko'rsatilgan elementdan keyin to'liq qo'shadi; remove - qiymati berilganga teng bo'lgan barcha elementlarni olib tashlaydi; remove_if - predikat bo'yicha barcha elementlarni olib tashlaydi; reverse - elementlarning tartibini o'zgartiradi; unique - ketma -ket barcha dublikatlarni olib tashlaydi; sort - ro'yxatni joyida tartiblaydi. Umuman olganda, bu funktsiyalar mos keladigan standart algoritmlarga o'xshaydi (ularning ro'yxatini quyida tegishli bo'limda ko'ring), lekin ular hech bo'lmaganda tezroq bajariladi va maksimal darajada oddiy bajariladi, chunki bir xil standart universal saralash std :: sort (dan, to) iteratorlarga tasodifiy kirishni talab qiladi va shuning uchun ro'yxatlarga umuman taalluqli emas. bog'langan ro'yxat Deque konteyner elementlarni ro'yxatga o'xshash o'zboshimchalik bilan joylashtirish va o'chirishga imkon beradi, lekin deque holatida bu operatsiyalar qimmatga tushadi: ular chiziqli o'lchamdagi konteyner uchun vaqt talab qilishi mumkin. Shuni ham yodda tutingki, elementlarni kiritish va o'chirish xotirada saqlangan elementlarning potentsial harakatlanishi tufayli oldindan saqlangan iteratorlar yoki ko'rsatgichlarni "chalkashtirib yuborishi" mumkin (agar ular ko'rsatgan elementlar o'chirilmasa, ro'yxat iteratorlari saqlanib qoladi) ... Massiv sizga zaxira funktsiyasidan foydalangan holda etarli hajmdagi do'konni oldindan tayyorlashga imkon beradi (harakatlanuvchi elementlarga olib kelishi mumkin). Sig'im funktsiyasidan foydalanib, saqlash hajmini bilib olishingiz mumkin. Shrink_to_fit funktsiyasi amalda egallagan hajmni saqlashni ajratadi va elementlarni u erga ko'chiradi, bu esa ajratilmagan xotirani bo'shatadi. Download 23.97 Kb. Do'stlaringiz bilan baham: |
1 2
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling