如何将枚举类值用作for循环的一部分?

别杰连科

我正在尝试通过遍历枚举来创建一副纸牌,Suit并且Rank(我知道没有很好的方法可以遍历枚举,但是我没有其他选择)。我是通过enum_count在每个枚举的末尾添加一个枚举数来实现的,该枚举数的值表示代表枚举的长度和结尾。

#include <vector>

using namespace std;

enum class Suit: int {clubs, diamonds, hearts, spades, enum_count};
enum class Rank: int {one, two, three, four, five, six, seven, eight,
                nine, ten, jack, queen, king, ace, enum_count};

struct Card {
    Suit suit;
    Rank rank;
};

class Deck{
    vector<Card> cards{};
    public:
        Deck();
};

Deck::Deck() {
    // ERROR ON THE BELOW LINE
    for (Suit suit = Suit::clubs; suit < Suit::enum_count; suit++) {
        for (Rank rank = Rank::one; rank < Rank::enum_count; rank++) {
            Card created_card;
            created_card.suit = suit;
            created_card.rank = rank;
            cards.push_back(created_card);
        };
    };
};

但是,当我尝试循环枚举时,编译器不喜欢我试图在for循环中增加suit++and rank++,说明:

card.cpp|24|error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]|
card.cpp|25|error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive]|

在不丢掉有用的枚举数据结构的情况下创建一副纸牌的最佳方法是什么?

赫斯卡隆

我建议做一些不同的事情。创建一个Suit的向量Rank,并使用STL的功能在它们上循环

const std::vector<Suit> v_suit {Suit::clubs, Suit::diamonds, Suit::hearts, Suit::spades};

const std::vector<Rank> v_rank {Rank::one, Rank::two, Rank::three, Rank::four, Rank::five, 
                          Rank::six, Rank::seven, Rank::eight, Rank::nine, Rank::ten, Rank::jack, 
                          Rank::queen, Rank::king, Rank::ace};

是的,您必须输入两次,但这允许您使用它们想要的任何值(即不连续),而不使用笨拙的东西enum_count例如,您想要什么卡?给我钻石枚举enum_count !!),否需要转换,并使用提供给的迭代器std::vector

要使用它们:

for(const auto & s : v_suit)
    for (const auto & r : v_rank)
        cards.push_back({s,r});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除哈希值的一部分?

如何将类名的一部分定义为宏?

如何将AngularJS / Ionic用作Backbone / Cordova项目的一部分?

如何将背景色仅作为选择的一部分?的CSS

如何设置构建环境变量以将Clang用作NDK的一部分?

如何将一个UIViewController作为屏幕的一部分

如何将模块用作软件包的一部分和直接可执行的脚本?

如何将FOAF用作另一种本体的一部分?

将单元格的值用作宏的一部分

如何将视图控制器呈现为视图的一部分?

如何将熊猫数据框按自身的一部分划分?

sql如何将增量显示为总增量的一部分

如何将外键(另一个模型)上的字段用作模型主键值的一部分

如何将变量用作数组名称的一部分

Laravel表单类将值提交为数组的一部分

如何将图像放置在其他图像的一部分上

UNIX如何将输入文件的基础用作输出文件的一部分

如何将括号之间的值复制到同一行的另一部分

AWK-如何将变量用作另一个变量名称的一部分

如何将存储库的一部分复制到Artifactory?

如何将连字符视为整个单词的一部分

如何将常量列表导出为 JavaScript 类的一部分

如何将用于数学的检查输入值用作克隆 div 元素的一部分

如何将表值包含为 URI 的一部分?

如何将 List<B> 添加到对象 A,其中 List<B> 是类 A 的一部分

如何将字符串的一部分更改为 JSX 元素?

如何将单引号转义为别名复合命令的一部分?

如何将 Conda 命令的一部分换行?

作为函数的一部分,如何将小数转换为等效时间?