C++ da dizinin eleman sayisini belirleme?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,193
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:

C++:
#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ç:

C++:
[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
5,789
Mesajlar
99,015
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top