在C ++中存储一组坐标数组(对矢量向量?)

时间:2016-07-01 21:48:13

标签: c++ arrays vector coordinates

首先,我对C ++很陌生,所以我可能不得不尝试使用伪代码和/或Python来解释我正在尝试做的事情......

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

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

等等。我本质上希望能够使用所讨论的精灵的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> > > > >'

我尝试了各种矢量,对和数组的突变,但我似乎无法弄明白。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我认为你的编译器可能无法处理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
    }
};