【发布时间】:2017-10-26 22:43:20
【问题描述】:
我想创建一个类以便保存图像。
class MyImage
{
public :
int height;
int width;
int size;
int matrix[];
MyImage(int h, int w)
{
this->height = h;
this->width = w;
this->size = h * w;
this->matrix = new int[size];
}
}
但是我收到了这个错误:
字段的类型不完整'int []'
我尝试使用矢量,但是当我想浏览 700x700 图像中的每个像素时,需要花费一些时间。
我看到了一些关于template<size_t> 的东西,但我不知道如何使用它。
或者也许使用int * 更好,但我会自己管理内存不是吗?
是否可以在构造函数中创建一个 int[0] 并调整其大小?
最好的方法是什么?
【问题讨论】:
-
c++ 不支持零大小的数组。使用
std::vector。即使您的编译器支持零大小的数组,您仍然需要自己管理内存。 -
在现代 C++ 中你应该使用member initializer lists。
-
不要使用 c 样式的数组而不是
std::vector以节省时间。它不会有帮助。一定有其他问题占用了您的时间 -
"我尝试使用矢量,但是当我想浏览 700x700 图像中的每个像素时,需要花费一些时间。"你为什么认为,为同一个任务使用动态分配的内存不会花费几次?
-
@A.Pissicat -- 我尝试过使用矢量
,但使用 700x700 的图像,它可以生成超过 490,000 个项目的矢量。处理每个像素需要很长时间。 -- 内部向量只不过是一个连续的内存块,与您使用new[]没有什么不同。 vector 维护的内部块很容易被data()成员函数指向。因此,在结构上,您的new[]调用与向量的作用没有区别,因此很难相信使用向量的缓冲区和您的new[]缓冲区处理像素需要更长的时间。
标签: c++