首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么让类中的数组成员的大小在初始化时可以改变

2013-01-07 
如何让类中的数组成员的大小在初始化时可以改变下面的程序说明了我的问题:我想定义一个类,这个类有一个siz

如何让类中的数组成员的大小在初始化时可以改变
下面的程序说明了我的问题:我想定义一个类,这个类有一个size成员,还有一个数组,而数组的大小是依据size来分配的。


class Test
{
public:
Test():size(5){};
const int size;
//int arr[size];如何让数组的大小在初始化时可以改变
};

程序编译时会出错。有没有什么办法啊?
PS:不要使用宏,我着实不喜欢宏。
[解决办法]

class Test
{
public:
    Test(){};
    enum{size = 5};
    int arr[size];
};

[解决办法]
看你这size是不是编译期常量了。。。
[解决办法]
改用vector
[解决办法]
好吧,我刚好看到 CA2W 这个类的实现,就看到了如何动态确定数组大小的。
不过要用到模板:
template <int TLength = 128>
class Cls
{
private:
  int arr[TLength];
};
之所以可以,是因为模板是静态编译时确定的。
[解决办法]
class Test
{
public:    
    Test():size(5){};
    const int size;
    int arr[];   //就这样不去指定不就行了,用的时候再指定长度。应该可以达到你想要的同样效果
};
[解决办法]
>我写的是一个图像处理程序
强烈推荐openCV2,对图像处理做了很多的优化
他的资料结构也是针对图像处理而设计的

>可以在初始化vector时先确定大小,然后就可以避免重新分配造成的效率损失
正确,vector的初始化你可以这样做
vector<type> A(640 * 480);

>如果不停的pushback,当大小不够时会重新分配
你对于push_back的猜测是正确的
空间不够的时候会重新分配一块更大的空间
[解决办法]
引用:
引用:动态的话就用vector吧,C++都实现好了。 自己写没必要。
我不想使用不使用vector,第一是因为我实际写的是一个图像处理程序,用vector真心没有使用数组来得

引用:你的size在编译阶段是不知道值的,所以不符合数组的声明与定义方式。如果想坚持用数组的话,可以用动态开辟内存空……


我看了15L的回答,我想我能说的也许就是那些了。说的很好,补充一下的是:STL中的容器慢的原因吧,这些都是泛型的产物,首先在静态编译阶段确定类型费时间,而且他这些容器是和迭代器配合起来使用的,这样子也会慢吧。数组则是和指针一起来用的,据说不是很靠谱的说法:在高阶编程语言里面,C/C++的数组与指针的配合使用或许是最快的访问内存的方式了。当然可能会有人说汇编或是机器语言更快的话,那就不是高阶语言的范畴了。

热点排行