【问题标题】:C++ best way to save large arrayC ++保存大型数组的最佳方法
【发布时间】: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++


【解决方案1】:

最好的方法是什么?

如果您在编译时知道大小,请使用std::array,如果您不使用std::vector 并正确初始化它。手动创建内存不会给您带来任何好处,只会让您头疼,std::vector 在幕后也是如此。

【讨论】:

    【解决方案2】:

    它是 C++,使用 std::vector

    #include <vector>
    class MyImage
    {
    public :
        int height;
        int width;
        std::vector<int> matrix;
    
        MyImage(int h, int w) : height(h), witdh(w), matrix(h*w)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-02
      • 2015-08-03
      • 1970-01-01
      • 2013-01-08
      • 2014-11-27
      • 2010-10-24
      • 2014-07-10
      • 2014-09-02
      相关资源
      最近更新 更多