我正在尝试创建一个简单的2D数组或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]));
总的来说,我只是没有成功制作一个2d智能指针对象阵列,并想知道是否有人可以提供帮助。对不起,如果我没有包含足够的细节,这是我的第一个堆叠溢出的帖子,所以请温柔:)
编辑:对不起,让我详细说明一下。所以我在工厂类型类中制作这个二维数组,基本上是一个单例。所以我需要这个2d数组在创建它之后继续存在并离开堆栈等。答案 0 :(得分: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;
}