使用向量c ++存储和洗牌一副牌

时间:2016-03-30 17:48:06

标签: c++

大家好,我一直坚持这个问题的时间最长,过去几天一直在这个问题上工作几个小时。我想用类似于下面代码的矢量将一副52张卡片洗牌,但不知道该怎么做。所有帮助将不胜感激。希望它能够采用最基本的代码形式,因为我正在学习入门级课程。 (这不是我任务的全部任务)。

#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;
}

所以代码随机化数字然而我想随机化一副​​牌......

在确定如何做到这一点之后,我需要玩家1将它作为一副7张随机牌作为矢量存储,然后将其推回到自己的矢量中。

1 个答案:

答案 0 :(得分:2)

在新代码中,您要使用std::shuffle std::random_shuffle

使用它,洗牌一副牌看起来像这样:

#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';
}