Giriş
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar rastgele karıştırma (shuffling) algoritmalarını gösteriyor.
random_shuffle - kullanmayın
std::shuffle(), std::random_shuffle() metodunun yerini aldı. std::random() shuffle depricate ediliyor.
random_shuffle metodunun imzası aşağıda.
Bu metodu kullanmak için aşağıdaki gibi yapıyorduk
shuffle
İmzası şöyle.
Java'daki Collections.shuffle() metoduna benzer. Farklı olarak, C++ metodu sadece RandomAccessIterator ile çalışır. Java'daki metod ise gerekirse verilen listenin bir kopyasını alır ve karıştırıp geri verir.
Forwarding Reference Parametre
Son parametre forwarding reference olduğu için RNG l-value veya r-value olabilir.
Örnek
l-value için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor. Aşağıdaki algoritmalar rastgele karıştırma (shuffling) algoritmalarını gösteriyor.
random_shuffle - kullanmayın
std::shuffle(), std::random_shuffle() metodunun yerini aldı. std::random() shuffle depricate ediliyor.
random_shuffle metodunun imzası aşağıda.
template< class RandomIt >
void random_shuffle( RandomIt first, RandomIt last );
Metod içeride C kütüphanesinin rand() metodunu kullanarak sayı üretebilir. Açıklaması şöyleYani std::rand() kullanılmak zorunda değil....the function std::rand is often used.
Bu metodu kullanmak için aşağıdaki gibi yapıyorduk
std::random_shuffle(v.begin(),v.end()); //no longer valid in c++14
İmzası şöyle.
template<class RandomIt, class URBG>
void shuffle(RandomIt first, RandomIt last, URBG&& g);
Verilen aralığı rastgele karıştırır. std::random_shuffle()'dan farklı olarak random number generator girmemize izin verir.Java'daki Collections.shuffle() metoduna benzer. Farklı olarak, C++ metodu sadece RandomAccessIterator ile çalışır. Java'daki metod ise gerekirse verilen listenin bir kopyasını alır ve karıştırıp geri verir.
Forwarding Reference Parametre
Son parametre forwarding reference olduğu için RNG l-value veya r-value olabilir.
Örnek
l-value için şöyle yaparız.
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
r-value için şöyle yaparız.std::shuffle(v.begin(), v.end(), std::mt19937(rd()));
Örnek - mt19937Şöyle yaparız.
std::random_device rd;
std::mt19937 generator(rd());
std::shuffle(a.begin(), a.end(), generator);
[0-6] arasında rastgele sayı üretmek için şöyle yaparız.int max_num = 6;
// Create vector
std::vector<int> container(max_num);
// Fill it with numbers 0, 1, ..., max_num - 1)
std::iota(container.begin(), container.end(), 0)
// Create random engine generator
std::mt19937 generator{ std::random_device{}() };
// shuffle it!!
std::shuffle(container.begin(), container.end(), generator);
ÖrnekŞöyle yaparız.
static std::mt19937 engine = [] {
std::random_device rd;
std::mt19937 engine(rd());
return engine;
}();
// You should be able to just use y.begin(), y.end()
std::shuffle(v.begin(), v.end(), engine);
Örnek - default_random_engineŞöyle yaparız.
std::array<card, 52> deck;
std::iota(deck.begin(), deck.end(), 0);
std::shuffle(deck.begin(), deck.end(), std::default_random_engine());
Hiç yorum yok:
Yorum Gönder