初始化后在c ++上设置数组大小

时间:2016-03-12 11:31:05

标签: c++ arrays

class foo{

private:
    int map[SCENE_WIDTH * SCENE_HEIGHT];

}

问题是我还不知道SCENE WIDTH,我想做点什么:

int map[];

void setSize(int s){
 map[5];
}

我知道这样做的唯一方法是执行int * map然后map = new int [3]然后我将使用动态内存,我将不得不在以后删除它。怎么做就像“第一种方法”?

2 个答案:

答案 0 :(得分:1)

int map[SIZE];在堆栈上分配 ,此数组的大小必须在编译时知道,并且必须在此变量的声明中提及,因为否则语法map[5];将被视为提取此数组的第六个值。

总而言之,你不能这样做,但你可以使用std::vector来达到这个目的。

答案 1 :(得分:1)

无法在标准C ++中调整类似的数组。

相反,请使用std::vector。例如;

#include <vector>

class foo
{
    public:

        foo(std::size_t size = 0) : map(size) {};     //  initialises number of elements in map

        void resize(std::size_t size)
        {
             map.resize(size);
        };

    private:
       std::vector<int> map;
};

vector<int>类型的对象被破坏时,包含的foo将被隐式销毁,并将释放它已分配的所有资源。

std::vector以外的容器满足特定需求,但std::vector在实践中是一个很好的默认选择。