C++ bir Vector'den her seferinden farkli bir elemanı rastgele çekmek

serhatt123

Hectopat
Katılım
1 Şubat 2020
Mesajlar
110
Evet başlıkta dediğim gibi bunu bir şekilde yapmam lazım ama nasıl bir döngü kurarım bilemedim.
 
Vector size limitine göre bir rastgele sayı oluştur. Örnek vermek gerekirse vector de 10 eleman var random sayı ile 0, 9 arası sayı al ve gelen index değerine göre elemanı çek.
 
Vector size limitine göre bir rastgele sayı oluştur. Örnek vermek gerekirse Vector de 10 eleman var random sayı ile 0, 9 arası sayı al ve gelen index değerine göre elemanı çek.

Tamam ama aynı eleman tekrar gelsin istemiyorum. Dediğin şekilde yaptım az önce 54 sayısı 4 kez çıktı.
 
Farklı yolları var. En kolayı time seed ile rand() fonskiyonu kullanarak random sayılar döndürebilirsiniz.

Eğer doğru anladıysam her defasında vektörden farklı değerin gelmesini istiyorsunuz.

C++:
#include <iostream>
#include <vector>

using namespace std;

int randomGenerator(const  vector<int>& vec) {
    if (vec.empty()) {
        throw runtime_error("Vector ici bos!");
    }

    srand(time(0));

    int randomIndex = rand() % vec.size();
    return vec[randomIndex];
}

int main() {
    vector<int> vectorlar = {1, 2, 3, 4, 5, 12,23, 43, 543, 6, -2, 32, 33, 333}; // burada inputla dinamik input ekleyebilirsin

    int randomValue = randomGenerator(vectorlar);
    cout << randomValue << endl;

    return 0;
}

Burada randomGenerator() fonksiyonu bir tane vector alıyor ve içi boşsa hata döndürüyor. Dolu vektörde ise random bir değeri çağırıyor.

Bu timestamp seedi yöntemi ile yapılmış random generator. Daha gelişmiş ve farklı algoritmalara dayanan random generatorlar olabilir.
 
shuffle et, sirayla cek.
Tekrarli eleman varsa set ile unique vektor elde edip sonra shuffle et.
 
Son düzenleme:
Tamam ama aynı eleman tekrar gelsin istemiyorum. Dediğin şekilde yaptım az önce 54 sayısı 4 kez çıktı.
Geçici bir index oluştur aynı indexe eşitse tekrar random ile farklı bir index al.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…