#include <bits/stdc++.h>
using namespace std;

// Bu çok daha hoş şekilde, bir class veya struct kullanılarak yazılabilir.
// İşin o tarafını sizlere bırakıyorum değerli arkadaşlar :)
// Bu sefer bir de size_t tip güncellemesi yaptım, daha uygun çünkü.
void eleman_ekle(int *&dizi, size_t &boyut, size_t &eleman_sayisi, int eleman) {
    // Dizi boyutunu artırmamız gerekiyor, tamamen dolmuş çünkü.
    if (boyut == eleman_sayisi) {
        const size_t eski_boyut = boyut;
        // Eğer boyut sıfır değilse 2 katına çıkar, sıfırsa 1 olsun.
        boyut = boyut ? boyut << 1 : 1; // Veya 2 * boyut, çok fark etmez
        int *yeni_dizi = new int[boyut];
        for (int i = 0; i < eski_boyut; i++) {
            yeni_dizi[i] = dizi[i];
        }

        delete dizi;
        dizi = yeni_dizi;
    }

    dizi[eleman_sayisi] = eleman;
    eleman_sayisi++;
}

int main() {
    // Rastgelelik için seed'i saniyeye bağlı tanımlıyorum.
    srand(time(0));

    cout << "Kac eleman eklensin? ";
    int eklenecek_eleman_sayisi;
    cin >> eklenecek_eleman_sayisi;

    // https://w...content-available-to-author-only...s.org/measure-execution-time-function-cpp/
    auto start = chrono::high_resolution_clock::now();

    size_t boyut = 0, eleman_sayisi = 0;
    int *dizi = new int[boyut];
    for (int i = 0; i < eklenecek_eleman_sayisi; i++) {
        int yeni_eleman = rand();
        eleman_ekle(dizi, boyut, eleman_sayisi, yeni_eleman);
    }

    auto end = chrono::high_resolution_clock::now();

    // Bu sefer milisaniye çok büyük geliyor :)
    // Mikrosaniye "us" ile ifade edilir. "Mikro" sembolü yerine "u" kullanılır.
    auto gecen_zaman_us = chrono::duration_cast<chrono::microseconds>(end - start).count();

    // Memory leak olmasın :)
    delete dizi;

    cout << eklenecek_eleman_sayisi << " eleman eklemek toplamda " << gecen_zaman_us << " mikrosaniye ("
         << gecen_zaman_us / 1000 << " ms) "
         << "surdu.\n ";
}