我想知道是否有一些方法来使用枚举初始化向量.枚举是必要的,因为我正在创建一个对象的矢量(相同的类,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 ++语法?
因此,如果您想生成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
希望有帮助