gpt4 book ai didi

c++ - 在 C++ 中存储一组坐标集(成对 vector 的 vector ?)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:15:48 27 4
gpt4 key购买 nike

首先,我是 C++ 的新手,所以我可能不得不深入研究伪代码和/或 Python 来解释我正在尝试做的事情...

我正在尝试为动画的每一帧存储多个 Sprite 的 X 和 Y 坐标对。我设想这类似于以下内容 - 假设 PLAIN == 1(使用枚举):

animationFrames[PLAIN][0] = { 20, 50 }
animationFrames[PLAIN][1] = { 25, 55 }

等等。我基本上希望能够使用相关 Sprite 的 ID 查询 animationFrames 并接收一组 X、Y 坐标以进行迭代。我发现这很棘手。这是我的尝试,但没有用...

std::vector< std::vector< std::pair<int, int> > > frames = {
{
{ 1, 1 }, { 2, 2 } // two frames for sprite A
},
{
{ 3, 3 }, { 4, 4 } // two frames for sprite B
}
};

这会导致以下错误消息:

prog.cpp: In function 'int main()':
prog.cpp:15: error: braces around initializer for non-aggregate type 'std::vector<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >, std::allocator<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > > >'

我尝试了 vector 、对和数组的各种变体,但我似乎无法弄清楚。

提前致谢!

最佳答案

我认为您的编译器可能无法处理 C++11 标准,这意味着它不支持大括号初始化。您可以将项目一项一项地添加:

std::vector<std::vector<std::pair<int, int> > > frames(2);
std::vector<std::pair<int, int> > &v1 = frames[0];
v1.push_back(std::pair<int, int>(1, 1));
v1.push_back(std::pair<int, int>(2, 2));
std::vector<std::pair<int, int> > &v2 = frames[1];
v2.push_back(std::pair<int, int>(3, 3));
v2.push_back(std::pair<int, int>(4, 4));

它更丑陋,但它应该可以工作。另一方面,如果你的编译器确实支持 C++11,你甚至不需要 =,你可以删除一些空格:

std::vector<std::vector<std::pair<int, int>>> frames {
{
{ 1, 1 }, { 2, 2 } // two frames for sprite A
},
{
{ 3, 3 }, { 4, 4 } // two frames for sprite B
}
};

请注意,一些较旧的编译器可能需要命令行参数才能启用 C++11 支持。例如,旧版本的 GCC (g++) 需要 -std=c++11

关于c++ - 在 C++ 中存储一组坐标集(成对 vector 的 vector ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38154267/

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