【发布时间】:2014-11-29 15:21:13
【问题描述】:
我有一个类需要存储一个可变大小的数组。理想情况下,这个大小将被定义为给类的构造函数的参数。
我可以定义一个常量,然后使用它,如下所示:
#include <iostream>
#define ARRSIZE 5
class Classy{
private:
int myarray[ARRSIZE];
public:
Classy();
void printarray();
};
Classy::Classy(){
for(int i = 0; i < ARRSIZE; i++){
myarray[i] = i * i * 2;
}
}
void Classy::printarray(){
for(int i = 0; i < ARRSIZE; i++){
std::cout << myarray[i] << std::endl;
}
}
但是,我想这样做:
#include <iostream>
class Classy{
private:
int arraysize;
int myarray[arraysize];
public:
Classy(int parraysize);
void printarray();
};
Classy::Classy(int parraysize){
arraysize = parraysize;
for(int i = 0; i < arraysize; i++){
myarray[i] = i * i * 2;
}
}
void Classy::printarray(){
for(int i = 0; i < arraysize; i++){
std::cout << myarray[i] << std::endl;
}
}
编译器确实不喜欢我的方法,所以我正在寻找另一种处理方式。
我对这个主题进行了一些谷歌搜索,但我的搜索没有取得成果。我发现this 方法使用动态内存分配来实现。这是我想避免的事情,所以我正在寻找一个不依赖于此的解决方案。很可能(而且我开始认为)它是解决我的问题的唯一优雅解决方案(如果是这种情况,问题当然应该作为重复关闭)。
【问题讨论】:
-
使用
std::vector。 -
一般来说,对于大多数用途,我不是阵列的忠实拥护者。除非您真的需要它们进行一些感知优化,否则
std::vector是您的朋友,并且更有可能随着您的需求变化而变化。但是您可以使用 std::array ... 方便的 C++ 替代 C 数组。 -
@HostileFork:
std::array不是可变大小。std::unique_ptr<T[]>是在构造时设置大小的数组的标准组件。std::vector<T>用于在其生命周期内大小可以变化的数组。 -
更一般地说:您想了解
new(啊,当然还有delete)的动态分配。 -
@BenVoigt 是的,我很清楚。但我最近讨论了这个问题,some people rabidly insist they want an array。去搞清楚。不要向信使开枪。