2016-03-30 17 views
-1

こんにちは私はこの問題を一番長い間解決しており、過去数日間、一度に数時間それを処理してきました。私は、以下のコードに類似したベクトルで52枚のカードのデッキをシャッフルしたいが、それをやることについては知らない。すべての助けに感謝します。私は入門レベルのコースを取っているので、可能な限り最も基本的なコード形式になることを願っています。 (これは私の任務の完全な仕事ではありません)。私はデッキのカードをランダムにしたいしかしベクトルを使用してカードのデッキを保管してシャッフルするC++

#include <vector> 
#include <algorithm> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    vector<int> vi; 


    for(int i=1; i <= 10; i++) 
     vi.push_back(i); 

//before shuffling 
    cout <<"Before shuffling: " << endl;; 
    for(int i=0; i < 10; i++)//printing index: value 
     cout << i << ": " << vi[i] << endl; 

random_shuffle(vi.begin(), vi.end()); 

cout << "\n ------------ \n"; 

//after 
cout <<"After shuffling: " << endl; 
for(int i=0; i < 10; i++) 
    cout << i << ": " << vi[i] << endl; 
} 

ので、コードが...数字をランダム

とそれを行う方法を考え出すした後、私は7枚のランダムカードの彼のデッキとしてこれを保存するためにプレイヤー1が必要ベクトルとして、それを自身のベクトルにプッシュバックします。

+0

です:

カードのデッキはこのような何かを見ることができシャッフル、それを使用していますか?たぶん[mcve]を投稿しますか? – juanchopanza

+0

あなたはベクトルをシャッフルしました。問題は 'a'と' z'だけで、どちらも宣言されていません。 – DimChtz

+0

ああ、aとzは1と10を意味します。 – Breindy

答えて

2

新しいコードでは、std::shuffle,ではなく、std::random_shuffleを使います。だから、 `z`は何

#include <random> 
#include <algorithm> 
#include <iterator> 
#include <iostream> 
#include <numeric> 

int main() { 
    std::vector<int> cards(52); 

    std::iota(cards.begin(), cards.end(), 1); 

    std::random_device rnd; 
    std::mt19937_64 gen(rnd()); 

    std::shuffle(cards.begin(), cards.end(), gen); 

    std::copy(cards.begin(), cards.end(), std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << '\n'; 
} 
+0

本物の好奇心:なぜランダムシャッフルよりシャッフルが好きでしたか? – kfsone

+1

@kfsone 'random_suffle'は現在の標準では廃止されており、C++では削除されます17。 – NathanOliver

+1

@kfsone:彼が使っているrandom_shuffleのバージョンはひどい仕様です。例えば、元々乱数を生成するために 'rand()'を使用することは禁止されていたので、生成元を生成するための信頼できる方法はありません( 'srand'は動作しないかもしれません - Cの適切な実装++ 98/03がC++で許可されています14)。 –

関連する問題