gpt4 book ai didi

c++ - 从数组中分配对象值的 vector ?

转载 作者:行者123 更新时间:2023-11-28 03:11:12 24 4
gpt4 key购买 nike

class block
{
private:
int xPos;
int yPos;
};

vector<block> stoneBlocks;

int stoneBlockXpos[] = {1, 2, 3, 4, 5, 6};
int stoneBlockYpos[] = {1, 2, 3, 4, 5, 6};

基本上,我想做的是为 xPosyPos 分配数组的值。最简单的方法是什么?我在几个 if() 语句中有这些数组,它们几乎是我正在制作的游戏关卡数据的 x 和 y 坐标。

我能想出的唯一可行的解​​决方案是在每个 if() 语句中放置一个 for() 循环,然后以这种方式分配值。但是,这不会很有效。

是的,如果有必要知道的话,一切都将以相同的方式发生。我正在我制作的“ map 创建者”中创建这些数组。这是另一回事。编写在创建者中完成的事情的唯一方法是将 vector 数字打印到数组格式的文本文档(x 和 y 各一个)并将它们粘贴到游戏项目的代码中。

谢谢! :)

最佳答案

假设您的 block 有一个采用两个 int 的构造函数,您可以这样做:

std::transform(std::begin(stoneBlockXpos), std::end(stoneBlockXpos),
std::begin(stoneBlockYpos),
std::back_inserter(stoneBlocks),
[](int x, int y) { return block(x, y); });

(同样可以用 C++03 完成,但它需要一些辅助函数)。

假设您需要经常这样做,您可以创建一个小的包装器来执行相同的操作,但还要确保两个数组都具有正确的大小,例如:

template <int Size>
std::vector<block>
makeBlocks(int (&xpos)[Size], int (&ypos)[Size])
{
std::vector<block> rc;
std::transform(std::begin(xpos), std::end(xpos),
std::begin(ypos),
std::back_inserter(rc),
[](int x, int y) { return block(x, y); });
return rc;
}

stoneBlocks = makeBlocks(stoneBlockXpos, stoneBlockYpos);

关于c++ - 从数组中分配对象值的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423876/

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