C++ 使用集合作为使用类初始化的属性

C++ 使用集合作为使用类初始化的属性,c++,set,C++,Set,我一直试图使用集合作为类的属性。这些集合需要在类初始化时初始化。我一直在尝试使用预先初始化的数组,然后将集合的值设置为数组的内容。然而,我的问题是,似乎只有在声明集合时才能将集合的内容设置为数组的内容,如果集合是类属性,我就不能这样做。我宁愿不单独添加每一件。有什么建议吗?下面是一些示例代码: cpp: Creature :: Creature() { Skill Init[] = {Balance,EscapeArtist,Hide,MoveSilently,OpenL

我一直试图使用集合作为类的属性。这些集合需要在类初始化时初始化。我一直在尝试使用预先初始化的数组,然后将集合的值设置为数组的内容。然而,我的问题是,似乎只有在声明集合时才能将集合的内容设置为数组的内容,如果集合是类属性,我就不能这样做。我宁愿不单独添加每一件。有什么建议吗?下面是一些示例代码: cpp:

        Creature :: Creature()
{
    Skill Init[] = {Balance,EscapeArtist,Hide,MoveSilently,OpenLock,Ride,SleightOfHand,Tumble,UseRope};
    //DexSkills = ??? (contents of init)
    Skill Init[] = {Climb,Jump,Swim};
    //StrSkills = ???
    Skill Init[] = {Concentration};
    //ConSkills = ???
    Skill Init[] = {Appraise,Craft,DecipherScript,DisableDevice,Forgery,Knowledge,Psicraft,Search,Spellcraft};
    //IntSkills = ???
    Skill Init[] = {Autohypnosis,ControlShape,Heal,Listen,Profession,SenseMotive,Spot,Survival};
    //WisSkills  = ???
    Skill Init[] = {Bluff,Diplomacy,Disguise,GatherInformation,HandleAnimal,Intimidate,Perform,UseMagicDevice,UsePsionicDevice};
    //ChaSkills = ???
}
在第h节中:

#pragma once
#define roll20 (rand()%20) + 1
#define Mod(stat) ((stat-10)/2)
#include <vector>
#include <set>
#include "Global.h"


class Creature
{
protected:
std::set<Skill> DexSkills;
std::set<Skill> StrSkills;
std::set<Skill> ConSkills;
std::set<Skill> IntSkills;
std::set<Skill> WisSkills;
std::set<Skill> ChaSkills;
//static const Skill StrSkills[3];
//static const Skill ConSkills[1];
//static const Skill IntSkills[9];
//static const Skill WisSkills[8];
//static const Skill ChaSkills[9];
const int maxHP;
int HP;
int hitDie;
int speed;
int babBase;
int fortBase;
int refBase; 
int willBase;
int AC;
int STR;
int CON;
int DEX;
int INT;
int WIS;
int CHA;
DamageResist DR;
std::vector<Feat> Feats;
Alignment alignment;
//std::set<DamageType> Weaknesses;
//std::set<DamageType> Resistances;
std::set<DamageType> Immunities;
int Resistances [15];
int SkillRanks[40];

public:
//Creature();
int Damage(int damage, DamageType type);
void getDamaged(int damage);
int StatRoll(int stat);
//int StrRoll();
//int ConRoll();
//int DexRoll();
//int IntRoll();
//int WisRoll();
//int ChaRoll();
int SkillCheck(Skill skill);

如果您正在寻找将C数组复制到集合中的简单方法,可以尝试以下方法:

#include <iterator>

...

int a[] = { 1, 2, 3, 4, 5, 6 };
int n = sizeof(a) / sizeof(a[0]);

std::set<int> s;
std::copy(a, a + n, std::inserter(s, s.end()));
#包括
...
inta[]={1,2,3,4,5,6};
int n=sizeof(a)/sizeof(a[0]);
std::集s;
std::copy(a,a+n,std::inserter(s,s.end());

您看到的问题是什么?您的问题有点不清楚。您只是想初始化构造函数中的一些集合吗?或者这些集合是打算成为静态类成员还是其他什么?
#include <iterator>

...

int a[] = { 1, 2, 3, 4, 5, 6 };
int n = sizeof(a) / sizeof(a[0]);

std::set<int> s;
std::copy(a, a + n, std::inserter(s, s.end()));