gpt4 book ai didi

c++ - 如何使用枚举初始化 vector/数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:22 28 4
gpt4 key购买 nike

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

//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) ) );

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

这就是为什么我想知道,它是否存在类似 vector<int> pieceIter {pieceEnum}; 的东西?在 C++ 中?上一句中的代码片段当然是无效的,但我认为它暗示了我的问题,使用枚举中的所有变量并以简单的方式初始化 vector ?

如果不是,是否可以像在 matlabl 中那样对 vector 使用某种“范围初始化”,例如:

vector<int> vec {1:32};

但是使用 c++ 语法?

最佳答案

所以如果你想 generate范围从 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;
}

输出:1个2个3个4个5个6个78个91011121314151617181920212223242526272829303132

希望对你有帮助

关于c++ - 如何使用枚举初始化 vector/数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com