C++ 如何使用枚举初始化向量/数组?

C++ 如何使用枚举初始化向量/数组?,c++,vector,enums,C++,Vector,Enums,我想知道是否有一些方法可以使用枚举初始化向量。枚举是必需的,因为我正在创建对象的向量(相同的类、棋子,但不同的类型)。我希望能够在不进行大量测试的情况下访问元素(if(这是white pawn 8).)。enum可以很好地用于逐项列出各个部分vec(W_PAWN8)…。无论如何,当我创建向量时,我会做类似的事情(伪代码) P>但是C++语法()解决这个问题的一种方法是将值添加到枚举中,枚举总是最后一个。 然后可以通过循环到该值来填充向量。大概是这样的: enum VALUES{ VA

我想知道是否有一些方法可以使用枚举初始化向量。枚举是必需的,因为我正在创建对象的向量(相同的类、棋子,但不同的类型)。我希望能够在不进行大量测试的情况下访问元素(
if(这是white pawn 8).
)。enum可以很好地用于逐项列出各个部分
vec(W_PAWN8)…
。无论如何,当我创建向量时,我会做类似的事情(伪代码)


<> P>但是C++语法(

)解决这个问题的一种方法是将值添加到枚举中,枚举总是最后一个。 然后可以通过循环到该值来填充向量。大概是这样的:

enum VALUES{

    VALUES_FIRST = 0,

    VALUES_SECOND,

    VALUES_END
};

std::vector<VALUES> Allvalues;

for(int i = 0; i < VALUES_END; i++){
    Allvalues.push_back(static_cast<VALUES>(i));
}
枚举值{
值_FIRST=0,
其次,
价值观
};
std::向量值;
对于(int i=0;i
将使用枚举中的所有值(不包括最后一个标记值)填充向量,只要不在
values\u END

之后添加任何内容,因此如果要将范围从1到32,可以使用generate和lambda结合使用

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> v(32);
    int n=0;
    std::generate(v.begin(), v.end(), [&]{ return ++n; }); 

    //to display the results
    for (auto& it: v){
        cout<<it<<" ";
    }
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
向量v(32);
int n=0;
std::generate(v.begin(),v.end(),[&]{return++n;});
//显示结果
用于(自动和it:v){

cout您还可以使用向量构造函数初始化向量,如下所示:

enum MyEnum {
  FIRST,
  SECOND,
  THIRD
};

// Example 1:
vector<int> v1(4, MyEnum::FIRST); // init a vector of size 4 to "FIRST".

// Example 2:
vector<MyEnum> v2(4, MyEnum::SECOND); // int a vector of enums.

// Example 3
vector<int> v3 {MyEnum::FIRST, MyEnum::THIRD}; // vector of int of size 2 with different values.

// Example 4:
vector<MyEnum> v4 {MyEnum::FIRST, MyEnum::THIRD}; // vector of enum.
enum MyEnum{
第一,
第二
第三
};
//例1:
向量v1(4,MyEnum::FIRST);//初始化大小为4的向量为“FIRST”。
//例2:
向量v2(4,MyEnum::SECOND);//int枚举的向量。
//例3
向量v3{MyEnum::FIRST,MyEnum::THIRD};//大小为2的int的向量,具有不同的值。
//例4:
向量v4{MyEnum::FIRST,MyEnum::THIRD};//枚举的向量。

std::iota
=1种可能性。也就是说,当你缺少工具时,就创建它。@Cheersandhth.-Alf这当然是一种可能性,我不知道
std::iota
。谢谢!我想另一种方式,用枚举初始化向量/数组可能需要更多的工作。并且可能需要编译器的支持。@patrik这不是一个简单的方法n尝试回答这个问题,但这对我来说更有意义,因为我是
std::map
,并且让
boardIdx
成为
文章的一员。
可能重复@patrik Welp,我对你做了这件事。很抱歉,StackOverflow最近太令人讨厌了。不过,这里还有一个关于上下文的说明:我假设你的
std::map
ALUE是实际的<代码>碎片<代码>?因为使用一个映射到一个索引为“代码> STD::vector < /代码>这是没有意义的。我知道,这将对EnUM的增加起作用,至少1步,从0开始。但是,我想你是指<代码>我就知道C++没有存储EnUM值,这样你可以在运行时MAK中检索它们。不可能对枚举值进行迭代。很好!我想我将创建一个函数来实现这一点。
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> v(32);
    int n=0;
    std::generate(v.begin(), v.end(), [&]{ return ++n; }); 

    //to display the results
    for (auto& it: v){
        cout<<it<<" ";
    }
    return 0;
}
enum MyEnum {
  FIRST,
  SECOND,
  THIRD
};

// Example 1:
vector<int> v1(4, MyEnum::FIRST); // init a vector of size 4 to "FIRST".

// Example 2:
vector<MyEnum> v2(4, MyEnum::SECOND); // int a vector of enums.

// Example 3
vector<int> v3 {MyEnum::FIRST, MyEnum::THIRD}; // vector of int of size 2 with different values.

// Example 4:
vector<MyEnum> v4 {MyEnum::FIRST, MyEnum::THIRD}; // vector of enum.