C++ 从数组中指定对象值的向量? 类块 { 私人: int XPO; int yPos; }; 矢量块; int stoneBlockXpos[]={1,2,3,4,5,6}; int stoneBlockYpos[]={1,2,3,4,5,6};
基本上,我想做的是将数组的值分配给C++ 从数组中指定对象值的向量? 类块 { 私人: int XPO; int yPos; }; 矢量块; int stoneBlockXpos[]={1,2,3,4,5,6}; int stoneBlockYpos[]={1,2,3,4,5,6};,c++,arrays,object,C++,Arrays,Object,基本上,我想做的是将数组的值分配给xPos和yPos。最简单的方法是什么?我在几个if()语句中使用了这些数组,它们几乎就是我正在制作的游戏的关卡数据的x和y坐标 我能想到的唯一可行的解决方案是在每个if()语句中放置一个for()循环,然后以这种方式分配值。但是,这不是很有效 是的,如果有必要知道的话,这一切都将以相同的方式发生。我正在我制作的“地图创建器”中创建这些数组。这是另一回事。编写creator中所做的事情的唯一方法是以数组的格式(x和y各一个)将矢量号打印到文本文档中,并将它们粘贴
xPos
和yPos
。最简单的方法是什么?我在几个if()
语句中使用了这些数组,它们几乎就是我正在制作的游戏的关卡数据的x和y坐标
我能想到的唯一可行的解决方案是在每个if()
语句中放置一个for()
循环,然后以这种方式分配值。但是,这不是很有效
是的,如果有必要知道的话,这一切都将以相同的方式发生。我正在我制作的“地图创建器”中创建这些数组。这是另一回事。编写creator中所做的事情的唯一方法是以数组的格式(x和y各一个)将矢量号打印到文本文档中,并将它们粘贴到游戏项目的代码中
谢谢!:) 如果您只想初始化向量一次(并且您有一个与C++11兼容的编译器),可以使用以下类型的方法:
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};
#包括
#包括
使用名称空间std;
类块
{
公众:
块(intx,inty):xPos(x),yPos(y){
私人:
int XPO;
int yPos;
};
int main()
{
静态向量stoneBlocks1{{1,1},{2,2},{3,3};
静态向量stoneBlocks2{{5,6},{7,8},{9,10};
...
}
假设您的块
有一个取两个int
s的构造函数,您可以这样做:
#include <vector>
#include <initializer_list>
using namespace std;
class block
{
public:
block(int x, int y) : xPos(x), yPos(y) {}
private:
int xPos;
int yPos;
};
int main()
{
static vector<block> stoneBlocks1 { {1, 1}, {2, 2}, {3, 3} };
static vector<block> stoneBlocks2 { {5, 6}, {7, 8}, {9, 10} };
...
}
(C++03也可以这样做,但它需要一些辅助函数)
假设您需要经常这样做,您可以创建一个小包装器,它执行相同的操作,但也确保两个数组的大小都正确,例如:
std::transform(std::begin(stoneBlockXpos), std::end(stoneBlockXpos),
std::begin(stoneBlockYpos),
std::back_inserter(stoneBlocks),
[](int x, int y) { return block(x, y); });
模板
向量
生成块(int(&xpos)[Size],int(&ypos)[Size])
{
std::向量rc;
std::transform(std::begin(xpos),std::end(xpos),
标准::开始(ypos),
标准:背面插入器(rc),
[](intx,inty){返回块(x,y);};
返回rc;
}
stoneBlocks=制造块(stoneBlockXpos、stoneBlockYpos);
当你想加载关卡时,是否不可能将关卡数据写入外部文件,然后将其读入游戏?如果你想在向量中使用它们,为什么要将它们存储在数组中?为什么要使用向量?你是在玩关卡时修改石头块吗?@NeilKirk我在自己制作的程序中生成了数字。我认为最简单的方法是以数组的形式打印它,然后将它粘贴到游戏的代码中,然后以某种方式将数组的值分配给游戏中的向量。这是原始文本。你能把这些数据放在代码之外的某个更高级别的数据存储中吗?你不是指std::transform(std::begin(stoneBlockXpos),std::end(stoneBlockXpos),
在您的第一个示例中?转换
非常有用。不,对不起。我在main的开头创建向量,并在整个游戏中传递它们不断修改它们。@Tobiasundell如果If语句中的数组从未更改(原始起始数据),为什么不改成静态向量?@NeilKirk你能告诉我怎么做/是什么吗?:)我对向量很陌生。我只编程了一年。static const vector stoneBlocks{{1,1},{2,2},{3,3}
类似于static const int stoneBlockXpos[]={1,2,3,4,5,6};静态常数int stoneBlockYpos[]={1,2,3,4,5,6}代码>@TobiasSundell:我已经添加了一个示例,说明了如何做到这一点。
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);