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

首先,我是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> > > > >'

我尝试了各种矢量,对和阵列的突变,但我似乎无法弄明白.

提前致谢!

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