如何打印random_shuffle向量<struct>的值

How to print values of a random_shuffle vector<struct>

本文关键字:lt 向量 struct 的值 gt shuffle 何打印 打印 random      更新时间:2023-10-16

我有一个结构数据类型的向量,我正在我的函数中random_shuffle我想打印出结果。我尝试了各种方法,但没有运气。我希望它控制随机播放的次数,并希望它能够打印出结果。我真的尝试过自己进行故障排除,我知道我需要制作一个 for 循环,但我只是不确定如何让它打印洗牌的结果,以及我是否希望它洗牌不止一张牌。任何帮助,不胜感激。

洗牌.cpp

#include <iostream>
#include <vector>
#include <algorithm>
#include "stdio.h"
#include "stdlib.h"
#include "ctime"
#include "cstdlib"
using namespace std;
struct node
{
int number;
string suit;
struct node *info;
};
int main()
{
vector<node> MyHand(52);
vector<int> getNum;
vector<string> getSuit;
int choice;
MyHand.push_back(node());
MyHand[0].number = 2;
MyHand[0].suit = "S";
MyHand[1].number = 2;
MyHand[1].suit = "H";
MyHand[2].number = 2;
MyHand[2].suit = "D";
MyHand[3].number = 2;
MyHand[3].suit = "C";
//2
MyHand[4].number = 3;
MyHand[4].suit = "S";
MyHand[5].number = 3;
MyHand[5].suit = "H";
MyHand[6].number = 3;
MyHand[6].suit = "D";
MyHand[7].number = 3;
MyHand[7].suit = "C";
//3
MyHand[8].number = 4;
MyHand[8].suit = "S";
MyHand[9].number = 4;
MyHand[9].suit = "H";
MyHand[10].number = 4;
MyHand[10].suit = "D";
MyHand[11].number = 4;
MyHand[11].suit = "C";
//4
MyHand[12].number = 5;
MyHand[12].suit = "D";
MyHand[13].number = 5;
MyHand[13].suit = "C";
MyHand[14].number = 5;
MyHand[14].suit = "D";
MyHand[15].number = 5;
MyHand[15].suit = "C";
//5
MyHand[16].number = 6;
MyHand[16].suit = "D";
MyHand[17].number = 6;
MyHand[17].suit = "C";
MyHand[18].number = 6;
MyHand[18].suit = "D";
MyHand[19].number = 6;
MyHand[19].suit = "C";
//6
MyHand[20].number = 7;
MyHand[20].suit = "D";
MyHand[21].number = 7;
MyHand[21].suit = "C";
MyHand[22].number = 7;
MyHand[22].suit = "D";
MyHand[23].number = 7;
MyHand[23].suit = "C";
//7
MyHand[24].number = 8;
MyHand[24].suit = "D";
MyHand[25].number = 8;
MyHand[25].suit = "C";
MyHand[26].number = 8;
MyHand[26].suit = "D";
MyHand[27].number = 8;
MyHand[27].suit = "C";
//8
MyHand[28].number = 9;
MyHand[28].suit = "D";
MyHand[29].number = 9;
MyHand[29].suit = "C";
MyHand[30].number = 9;
MyHand[30].suit = "D";
MyHand[31].number = 9;
MyHand[31].suit = "C";
//9
MyHand[32].number = 10;
MyHand[32].suit = "D";
MyHand[33].number = 10;
MyHand[33].suit = "C";
MyHand[34].number = 10;
MyHand[34].suit = "D";
MyHand[35].number = 10;
MyHand[35].suit = "C";
//10
MyHand[36].number = 11; //need to convert to string "J"
MyHand[36].suit = "D";
MyHand[37].number = 11;
MyHand[37].suit = "C";
MyHand[38].number = 11;
MyHand[38].suit = "D";
MyHand[39].number = 11;
MyHand[39].suit = "C";
//11 (J)
MyHand[40].number = 12; //need to convert to string "Q"
MyHand[40].suit = "D";
MyHand[41].number = 12;
MyHand[41].suit = "C";
MyHand[42].number = 12;
MyHand[42].suit = "D";
MyHand[43].number = 12;
MyHand[43].suit = "C";
//12 (Q)
MyHand[44].number = 13; //need to convert to string "K"
MyHand[44].suit = "D";
MyHand[45].number = 13;
MyHand[45].suit = "C";
MyHand[46].number = 13;
MyHand[46].suit = "D";
MyHand[47].number = 13;
MyHand[47].suit = "C";
//13 (K)
MyHand[48].number = 14; //need to convert to string "A"
MyHand[48].suit = "D";
MyHand[49].number = 14;
MyHand[49].suit = "C";
MyHand[50].number = 14;
MyHand[50].suit = "D";
MyHand[51].number = 14;
MyHand[51].suit = "C";
//14 (A)
while (1)
{
    printf("1. Add a hand.n");
    printf("2. Exit.");
    scanf("%d", choice);
    switch (choice)
    {
    case 1:
        printf("nAdding a hand!n");
        random_shuffle(MyHand.begin(), MyHand.end());
        break;
    case 2:
        exit(1);
    default:
        printf("n Invalid Choice. n");
        break;
    }
}

}

我尝试过的代码:

        switch (choice)
    {
    case 1:
        printf("nAdding a hand!n");
        random_shuffle(MyHand.begin(), MyHand.end(), MyHand);
        for (vector<node>::const_iterator i = MyHand.begin(); i != MyHand.end(); ++i)
        std::cout << *i << ' ';
        break;
    case 2:
        exit(1);
    default:
        printf("n Invalid Choice. n");
        break;
    }

您的当前 for 循环不会编译,因为std::ofstream::operator<<没有重载,需要const node对象。通过添加自己的一个来解决此问题,例如:

std::ostream& operator<<(std::ostream& o, const node& n)
{
    return o << n.number << " " << n.suit;
}