C++ ile dinamik dizi boyutunu yeniden artırma

Standart C programlama dilinde malloc ile oluşturduğumuz dinamik dizinin boyutunu daha sonra realloc ile yeniden boyutlandırarak artırabiliyorduk.

C++ programlama dilinde dinamik dizi tekrar boyutlandırılamıyor, bunun için vektör kullanmanız tavsiye ediliyor. Bu örnek biz dizi boyutunu C++ da özel bir fonksiyon ile ayırtacağız. Yaptığımız iş aslında eski dizinin 2 katı kadar boyutta yeni dizi oluşturup, eski diziyi yeni diziye kopyalamaktan ibaret.


#include <iostream>
#include<algorithm>

using  namespace  std;


void diziGenislet(int*& a, size_t& n)
{
   size_t yeniboyut = 2 * n;
   int* yenidizi = new int[yeniboyut];
   copy(a, a + n, yenidizi);

   delete[] a;

   a = yenidizi;
   n = yeniboyut;
}


int main() {

    size_t ogrencisay;
    double toplam=0, ortalama=0;

    cout << "Ogrenci Sayisi:" << endl;
    cin>>ogrencisay;

    int *notlar= new int[ogrencisay];

    for( int i=0;i<ogrencisay;i++) {
        cout << (i+1)<< " .Ogrenci notunu giriniz:" << "\n";
        cin>>notlar[i];
    }

    string cevap;
    cout<<"Tekrar eklemek ister misiniz?"<<"\n";
    cin>>cevap;

    if(cevap=="E" || cevap=="e"){
        diziGenislet(notlar,ogrencisay);

        cout<<"Yeni ogrenci sayisi:"<<ogrencisay<<"\n";

        for( int j=ogrencisay/2;j<ogrencisay;j++){
            cout << (j+1) << " .Ogrenci notunu giriniz:" << "\n";
            cin>>notlar[j];
        }

        cout<<"=== Tum Dizi ==="<<"\n";

        for(int k=0;k<ogrencisay;k++){
            cout<<notlar[k]<<"\n";
            toplam+=notlar[k];
        }

        cout<<"Ortalama:"<<(toplam/ogrencisay)<<"\n";
    }


    return 0;
}


Ekran çıktısı aşağıdaki gibi olacaktır. Burada önce 3 öğrenci için dinamik olarak yer tahsis edip, daha sonra yeniden boyutlandırarak tahsis ettiğimiz yeri 2 katına çıkardık ve kullanıcının programdan çıkmadan dinamik olarak istediği gibi veri girmesini sağladık. Bu işlemi daha önce de belirttiğimiz gibi vektörlerle de yapabilirsiniz ama bu yöntem vektörlere göre daha hızlı çalışacaktır.  Tabi vektörlere başka yazılarımızda değineceğiz.
 




Mutlu kodlamalar,
Oğuzhan TAŞ
Ocak 2021.

Bookmark and Share