1

我正在尝试创建一个简单的二维数组或 SFML 的 Sprite 对象的向量。我尝试了许多不同的方法,但最终总是出错或只是一个空向量。

我努力了

// first x
for ( int c = 0; c < w ; ++c)
{
    vector<unique_ptr<sf::Sprite>> col;
    map.push_back(std::move(col));

    // then y
    for ( int r = 0; r < h ; ++r) {
        map[c].push_back(unique_ptr<sf::Sprite>(new sf::Sprite()));
    }
}

unique_ptr<sf::Sprite[0][0]> map;
...
map.reset(unique_ptr<sf::Sprite[0][0]>(new sf::Sprite[w][h]));

总的来说,我只是没有成功制作二维智能指针对象数组,并且想知道是否有人可以提供帮助。对不起,如果我没有包含足够的细节,这是我第一篇堆栈溢出的帖子,所以请温柔:)

编辑:让我对此提供更多细节,对不起。所以我在一个基本上是单例的工厂类型类中制作这个二维数组。所以我需要这个二维数组在它被创建并离开堆栈等之后持续存在。

4

1 回答 1

0

您将声明map为指向多维数组的指针并尝试将类型的对象std::vector<>插入其中。相反,您可以使用向量(在这种情况下为向量)并消除数组的分配并在过程中简化它。

#include <memory>
#include <vector>

namespace sf { class Sprite {}; }

int main()
{
    const int w = 5;
    const int h = 5;

    // vector of vectors of Sprites is what you're looking for
    std::vector<std::vector<std::unique_ptr<sf::Sprite>>>   map;

    // first x
    for ( int c = 0; c < w ; ++c)
    {
        // No need to access via index of c. Just append to the column vector itself.
        std::vector<std::unique_ptr<sf::Sprite>> col;

        // then y
        for ( int r = 0; r < h ; ++r)
        {
             col.push_back(std::unique_ptr<sf::Sprite>(new sf::Sprite()));
        }

        // Now add the column vector.
        map.push_back(std::move(col));
    }

    return 0;
}
于 2013-04-22T02:04:35.327 回答