如何使用枚举初始化矢量/数组?

pat*_*rik 6 c++ enums vector

我想知道是否有一些方法来使用枚举初始化向量.枚举是必要的,因为我正在创建一个对象的矢量(相同的类,Chess_piece,但不同的类型).我希望能够在没有大量测试的情况下访问该元素(if (this is white pawn 8)...).枚举可用于以漂亮的方式逐项列出vec(W_PAWN8)....无论如何,当我创建矢量时,我会做这样的事情(伪代码)

//generate enum of pieces
enum pieceList{
...
} pieceEnum;
vector<int> pieceIter = {W_PAWN1,W_PAWN2,...}; //equal to {1,2,...}
//board index goes from lower left to upper right
vector<int> boardIdx = {8,9,10,11,12,13,14,15,16,1...};
vector<Piece*> pieceVec;
for (int i=0; i<32; i++)
    pieceVec.pushback( new Piece( boardIdx(i), pieceIter(i) ) );
Run Code Online (Sandbox Code Playgroud)

但是,现在我实际上写了两次相同的东西.当我创建枚举和pieceIter.对于这个程序,我可以忍受它,但我可能不止一次有同样的问题.

这就是我想知道它存在vector<int> pieceIter {pieceEnum};于c ++中的原因吗?上一句中的代码片段当然是无效的,但我认为它提示我的问题,使用枚举中的所有变量并以简单的方式初始化向量?

如果没有,是否可以在matlabl中使用某种"范围初始化",例如:

vector<int> vec {1:32};
Run Code Online (Sandbox Code Playgroud)

但是用c ++语法?

Gab*_*iel 3

因此,如果您想生成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;
}
Run Code Online (Sandbox Code Playgroud)

输出:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

希望有帮助