C++ da dizinin eleman sayisini belirleme?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,605
Kabaca 300 elemanli bir diziye ihtiyacim var. Istedigim kodu Pyhton ile yazarken diziye eleman ekle cikar yapmistim. Anladigim kadari ile c de dogrudan eleman ekleyerek diziyi genisletemiyoruz.

Simdi
Bastan 300 elemanli bir dizi tanimlayip yayla gibi kullanmakmi?

Yoksa
Ekleme ihtiyaci olunca döngüler ile dizi olusturup eski diziden yeni diziye aktarim ile diziyi genisletmek mi? Bu arada kod icinde degisken ile dizinin eleman sayisi belirlenirmi?

Yoksa zaten eleman ekleme var mi?
 
C++ dilinin kendi tanımında bir diziyi genişletmek veya daraltmak yok. Onun yerine malloc ailesini kullanarak belli büyüklükte bir hafıza alanı ayırıyorsun, sonra bu alanı büyütmek için realloc kullanıyorsun.

Eğer STL musibetine bulaşmak istiyorsan, STL'de dinamik array ve benzeri büyüyebilen veri yapıları için sınıflar var.
 
Bir dizideki eleman sayısını belirleme:

Kod:
#include <stdio.h>

static unsigned int int_dizi[860];

typedef struct
{
   unsigned char buffer[20];
   unsigned int size;
} SBUFFER;

static SBUFFER yapi_dizi[170];

static SBUFFER* yapi_dizi_ptr = yapi_dizi;

int main()
{
   printf("int_dizi byte boyutu   = %u\n", sizeof(int_dizi));
   printf("int_dizi eleman sayisi = %u\n", sizeof(int_dizi) / sizeof(int_dizi[0]));
   printf("\n");
   printf("yapi_dizi byte boyutu   = %u\n", sizeof(yapi_dizi));
   printf("yapi_dizi eleman sayisi = %u\n", sizeof(yapi_dizi) / sizeof(yapi_dizi[0]));
   printf("\n");
   printf("yapi_dizi_ptr pointer kendi byte boyutu      = %u\n", sizeof(yapi_dizi_ptr));
   printf("yapi_dizi_ptr pointer ilk eleman byte boyutu = %u\n", sizeof(yapi_dizi_ptr[0]));
   printf("yapi_dizi_ptr pointer ilk eleman byte boyutu = %u\n", sizeof(*yapi_dizi_ptr));

   return 0;
}

Bu programı benim linux makinada derleyince alınan sonuç:

Kod:
[ta@bonsai ~]$ g++ a.cpp
[ta@bonsai ~]$ ./a.out
int_dizi byte boyutu   = 3440
int_dizi eleman sayisi = 860

yapi_dizi byte boyutu   = 4080
yapi_dizi eleman sayisi = 170

yapi_dizi_ptr pointer kendi byte boyutu      = 8
yapi_dizi_ptr pointer ilk eleman byte boyutu = 24
yapi_dizi_ptr pointer ilk eleman byte boyutu = 24
[ta@bonsai ~]$
 
C++ dilinin kendi tanımında bir diziyi genişletmek veya daraltmak yok. Onun yerine malloc ailesini kullanarak belli büyüklükte bir hafıza alanı ayırıyorsun, sonra bu alanı büyütmek için realloc kullanıyorsun.

Eğer STL musibetine bulaşmak istiyorsan, STL'de dinamik array ve benzeri büyüyebilen veri yapıları için sınıflar var.

Ben bu STL konusuna hala tam anlamadım. Normal C deki stdio.h yerine C++ in iostream sınıfını kullandığımda STL mi kullanmış oluyorum?
 
STL çok daha kapsamlı bir kütüphane. iostream mevcut yüzlerce sınıftan sadece birisi.
 
Tamam simdi biraz oturmaya basladi.

O zaman soyle mi dusunmeliyim.

Temel islemlerler isin C fonksiyonlari
OOP icin c++ yetenekeri...
 

Forum istatistikleri

Konular
8,928
Mesajlar
145,141
Üyeler
3,596
Son üye
ata

Son kaynaklar

Back
Top