O‘zbekiston respublikasi axborot texnologiyalari va kommunikatsiyalarini rivojlantirish vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti urganch filali dasturlash 1 fanidan Mustaqil ish Gurux: 972-21


Download 45.18 Kb.
bet1/2
Sana22.11.2023
Hajmi45.18 Kb.
#1793748
  1   2
Bog'liq
6-mustaqil ish





O‘ZBEKISTON RESPUBLIKASI AXBOROT
TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI
RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI URGANCH FILALI
Dasturlash 1 fanidan

Mustaqil ish

Gurux: 972-21
Topshirdi: Normuminov Muhriddin
Fan o’qituvchisi:______________________

Urganch 2022

Mavzu: Vektorlarni tashkil etish.
Vektorlar o'lchamlari o'zgarishi mumkin bo'lgan massivlarni ifodalovchi ketma-ket konteynerlardir.

Xuddi massivlar singari, vektorlar ham o'z elementlari uchun tutashgan saqlash joylaridan foydalanadilar, ya'ni ularning elementlariga uning elementlariga muntazam ko'rsatgichlardagi ofsetlar yordamida va massivlardagi kabi samarali kirish mumkin. Ammo massivlardan farqli o'laroq, ularning o'lchamlari dinamik ravishda o'zgarishi mumkin, ularning saqlashi konteyner tomonidan avtomatik ravishda amalga oshiriladi.

Ichki vektorlar o'z elementlarini saqlash uchun dinamik ravishda ajratilgan massivdan foydalanadilar. Yangi elementlar kiritilganda hajmini oshirish uchun bu massivni qayta taqsimlash kerak bo'lishi mumkin, bu esa yangi massiv ajratish va barcha elementlarni unga ko'chirishni nazarda tutadi. Bu ishlov berish vaqti jihatidan nisbatan qimmat vazifa va shuning uchun konteynerga har bir element qo'shilganda vektorlar qayta taqsimlanmaydi.

Buning o'rniga, vektor konteynerlari mumkin bo'lgan o'sish uchun qo'shimcha saqlash joylarini ajratishi mumkin va shuning uchun konteyner o'z elementlarini (ya'ni, uning hajmi ) saqlash uchun zarur bo'lgan saqlash hajmidan kattaroq haqiqiy sig'imga ega bo'lishi mumkin. Kutubxonalar xotiradan foydalanish va qayta taqsimlash o'rtasidagi muvozanatni saqlash uchun turli xil o'sish strategiyalarini amalga oshirishi mumkin, ammo har qanday holatda, qayta taqsimlashlar faqat o'lchamning logarifmik ravishda o'sib borayotgan oraliqlarida amalga oshirilishi kerak , shunda vektor oxiriga alohida elementlarning kiritilishi amortizatsiyalangan doimiy vaqt bilan ta'minlanishi mumkin. murakkablik (qarang push_back ).



Shuning uchun, massivlarga nisbatan vektorlar saqlashni boshqarish va samarali tarzda dinamik o'sish qobiliyati evaziga ko'proq xotirani iste'mol qiladi.
 

Sarlavhada belgilangan













template<
class T,
class Allocator = std::allocator> class vector; (1)







namespace pmr {
template< class T >
using vector = std::vector>; (2)
}






















1) std::vectordinamik o'lchamli massivlarni qamrab oluvchi ketma-ketlik konteyneridir.
2) std::pmr::vectorpolimorfik ajratuvchidan foydalanadigan taxallus shablonidir .
Elementlar ketma-ket saqlanadi, ya'ni elementlarga faqat iteratorlar orqali emas, balki elementlarga muntazam ko'rsatgichlar uchun ofsetlardan ham foydalanish mumkin. Bu shuni anglatadiki, vektor elementiga ko'rsatgich massiv elementiga ko'rsatgichni kutayotgan har qanday funktsiyaga uzatilishi mumkin.
Vektorni saqlash avtomatik tarzda amalga oshiriladi, kerak bo'lganda kengaytiriladi. Vektorlar odatda statik massivlarga qaraganda ko'proq joy egallaydi, chunki kelajakdagi o'sishni boshqarish uchun ko'proq xotira ajratiladi. Shunday qilib, har safar element kiritilganda vektorni qayta taqsimlash kerak emas, faqat qo'shimcha xotira tugashi bilan. Ajratilgan xotiraning umumiy hajmini sig'im() funksiyasi yordamida so'rash mumkin . Qo'shimcha xotira tizimga shrink_to_fit() qo'ng'irog'i orqali qaytarilishi mumkin . (C++11 dan beri)
Qayta taqsimlash odatda ishlash nuqtai nazaridan qimmat operatsiyalardir. Agar elementlar soni oldindan ma'lum bo'lsa, reserve () funktsiyasidan qayta taqsimlashni bartaraf etish uchun foydalanish mumkin.
Vektorlar ustidagi umumiy operatsiyalarning murakkabligi (samaradorligi) quyidagicha:

  • Tasodifiy kirish - doimiy O(1)

  • Elementlarni oxirida kiritish yoki olib tashlash - amortizatsiyalangan doimiy O(1)

  • Elementlarni kiritish yoki olib tashlash - O(n) vektorining oxirigacha bo'lgan masofada chiziqli.

std::vector( T boshqalar uchunbool) Container , AllocatorAwareContainer , SequenceContainer ContiguousContainer va ReversibleContainer talablariga javob beradi .
C++ vektori standart andozalar kutubxonasidagi (STL) shablon sinfi boʻlib, u yanada aniqroq massiv sifatida ishlaydi. Massivlardan farqli o'laroq, vektorlar elementlarni kiritish yoki o'chirishda avtomatik ravishda o'lchamlarini o'zgartirishi mumkin , shuning uchun doimiy o'zgaruvchan ma'lumotlar bilan ishlashda ulardan foydalanish juda yaxshi. C++ dasturida vektorlardan foydalanish maʼlumotlaringizni yanada moslashuvchan va samarali saqlash imkonini beradi. Bugun biz C++ vektorlariga chuqurroq kirib boramiz va imtiyozlar, funksiyalar va ishga tushirishni muhokama qilamiz.

Download 45.18 Kb.

Do'stlaringiz bilan baham:
  1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling