初始化后在c ++上设置数组大小[重复]

Posted

技术标签:

【中文标题】初始化后在c ++上设置数组大小[重复]【英文标题】:set array size on c++ after initialization [duplicate] 【发布时间】:2016-03-12 11:31:04 【问题描述】:
class foo

private:
    int map[SCENE_WIDTH * SCENE_HEIGHT];


问题是我还不知道场景宽度,我想做类似的事情:

int map[];

void setSize(int s)
 map[5];

我知道这样做的唯一方法是执行 int *map 然后 map = new int[3] 但我将使用动态内存,我必须稍后将其删除。如何像“第一种方法”那样做?

【问题讨论】:

改用std::vector<int>resize() 简短的版本是,你不能。数组的大小必须是编译时常量。 (Gcc 和 clang 对运行时大小的数组进行了扩展,但我认为这不适用于类成员)。这里正常的做法是使用标准库组件std::vector 那么如果我必须通过向量会更糟,因为我需要一个迭代器 @DanielRocaLopez 我不明白您对需要迭代器的抱怨? vector 访问与数组访问非常相似,您使用 v[index] 或行为与指针基本相同的迭代器。 【参考方案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;
;

foo 类型的对象被销毁时,包含的vector&lt;int&gt; 将被隐式销毁,并释放它已分配的所有资源。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

int map[SIZE] 将被分配到任何foo 对象被分配的地方,这可以是堆栈、堆、静态数据区或其他任何地方

以上是关于初始化后在c ++上设置数组大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章

指针大小不正确[重复]

C语言,查找数组里重复出现的数字;

如何将数组中的连续数字设置为0 C++

在C中的堆栈上分配一个大数组[重复]

# 20175329 2018-2019-2 《Java程序设计》 第二周学习总结

在从 PHP 数组填充的 JQuery HTML 选择列表上设置 SELECTED 属性 [重复]