Dinamik massivlar



Download 15,5 Kb.
Sana31.12.2021
Hajmi15,5 Kb.
#263293
Bog'liq
Husniddinmustaqilishsongi



Dinamik massivlar

O'zgaruvchanlarni dinamik ravishda taqsimlash bilan bir qatorda biz massivlarni ham dinamik ravishda taqsimlashimiz mumkin. Uning kattaligi kompilyatsiya vaqtida ma'lum bo'lishi kerak bo'lgan sobit qatordan farqli o'laroq, C ++ da massivlarni dinamik ajratish uning uzunligini ish vaqtida belgilashga imkon beradi.



Mundarija:

Dinamik massivlar

Dinamik qatorni olib tashlash

Dinamik massivlarni ishga tushirish

Massivlar uzunligini o'zgartirish

Sinov

Dinamik massivlar

Dinamik massivni ajratish va u bilan ishlash uchun yangi va o'chirish operatorlarining alohida shakllari qo'llaniladi: yangi [] va o'chirish [].



1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17


#include

int main()

{

    std::cout << "Enter a positive integer: ";



    int length;

    std::cin >> length;

    int *array = new int[length]; // massiv ajratish uchun new [] operatoridan foydalanamiz. E'tibor bering, uzunlik doimiy bo'lishi shart emas!

    std::cout << "Men faqat uzunlikdagi bir qatorni ajratdim"<< length << '\n';

    array[0] = 7; // elementni 0 dan 7 gacha indeksda belgilang

    delete[] array; //   massivga ajratilgan xotirani bo'shatish uchun delete [] operatoridan foydalaning

  array = 0; // C ++ 11 da 0 o'rniga nullptr dan foydalaning

    return 0;

}


Biz qatorni ajratayotganimiz sababli, C ++ yangi operatorning boshqa shakli - o'zgaruvchini emas, balki massiv formasini ishlatishi kerakligini tushunadi. Aslida, yangi [] operatori chaqiriladi, hatto yangi kalit so'zdan keyin darhol [] ko'rsatmasak ham.

dinamik massivlar

Agar siz 0 qiymatiga ega bo'lgan dinamik qatorni ishga tushirishni xohlasangiz, unda hamma narsa juda oddiy:



1

int *array = new int[length]();

C ++ 11 dan oldin nolga teng bo'lmagan qiymatlar bilan dinamik qatorni ishga tushirishning oson usuli yo'q edi (boshlang'ich ro'yxati faqat sobit massivlar bilan ishlagan). Bu shuni anglatadiki, massivning har bir elementi ustida takrorlash va unga aniq qiymat berish kerak:

1

2

3



4

5

6



int *array = new int[5];

array[0] = 9;

array[1] = 7;

array[2] = 5;

array[3] = 3;

array[4] = 1;



Biroz charchagan, shunday emasmi?

Biroq, C ++ 11 dan boshlab, boshlang'ich ro'yxatlari orqali dinamik massivlarni ishga tushirish mumkin bo'ldi:



1

2


int fixedArray[5] = { 9, 7, 5, 3, 1 }; // sobit qatorni ishga tushirish

int *array = new int[5] { 9, 7, 5, 3, 1 }; // dinamik qatorni ishga tushirish



Qator uzunligi va boshlang'ich ro'yxati o'rtasida dinamik qator sintaksisida tayinlash operatori (=) mavjud emasligiga e'tibor bering.

C ++ 11 da sobit massivlarni bir xil boshlanish yordamida boshlash mumkin:



1

2


int fixedArray[5] { 9, 7, 5, 3, 1 }; // инициализируем фиксированный массив в C++11

char fixedArray[14] { "Hello, world!" }; // инициализируем фиксированный массив в C++11



Biroq, ehtiyot bo'ling, chunki C ++ 11 da siz C uslubidagi qator bilan dinamik belgilar qatorini ishga tushirolmaysiz:



1

char *array = new char[14] { "Hello, world!" }; // не работает в C++11

Buning o'rniga siz std :: stringni dinamik ravishda ajratishingiz mumkin (yoki dinamik belgilar qatorini ajratishingiz va keyin kerakli qator tarkibini shu qatorga ko'chirish uchun strcpy_s () funktsiyasidan foydalanishingiz mumkin). Iltimos, diqqat qiling, dinamik massivlar ularning uzunligini aniq ko'rsatgan holda e'lon qilinishi kerak:

1

2

3



4

5


int fixedArray[] {1, 2, 3}; // ок: неявное указание длины фиксированного массива

int *dynamicArray1 = new int[] {1, 2, 3}; // не ок: неявное указание длины динамического массива

int *dynamicArray2 = new int[3] {1, 2, 3}; // ок: явное указание длины динамического массива


Massivlar uzunligini o'zgartirish

Massivlarni dinamik taqsimlash ajratish paytida ularning uzunligini belgilashga imkon beradi. Biroq, C ++ allaqachon ajratilgan qator uzunligini o'zgartirish uchun ichki usulni taqdim etmaydi. Ammo hatto ushbu cheklovni yangi qatorni dinamik ravishda ajratish, barcha elementlarni eski massivdan nusxalash va keyin eski qatorni o'chirish yo'li bilan chetlab o'tish mumkin. Ammo, bu usul xatoga yo'l qo'yadi (bu haqda keyinroq).



Yaxshiyamki, C ++ da vektorlar (std :: vector) deb nomlanadigan o'lchamlari o'zgaruvchan massivlar mavjud. Ular haqida tegishli darsda gaplashamiz.


Download 15,5 Kb.

Do'stlaringiz bilan baham:




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish