c++ - 我如何读写 float 组?

标签 c++

我有一个 float 组。因为我处理大数据 > 10 GB 我想分配一些空间 但是我该如何写入和读取这些数据呢?我不得不说,我是一名 matlab 编码员,不知道如何在 C++ 中执行此操作。

// allocating space
float *buffnew = new float[size_x*size_y*size_z];
// write
**buffnew[x][y][z] = 1.1f;
// read
prediction = **buffnew[x][y][z];

这不起作用。我得到的错误是:

error: subscripted value is not an array, pointer, or vector

编辑:我只看到我的错误。我使用一维数组进行分配(在堆上,因为数据量大),然后使用 3D 来访问它。

最佳答案

C++ 没有为动态多维数组提供方便的语法。你已经分配了一个一维数组,所以你需要做算术来访问它,例如:

buffnew[x*size_y*size_z + y*size_z + z] = 1.1f;

将数组包装在一个类中可能有意义,并使用访问函数来执行算术运算:

template <typename T>
class array3d {
public:
    array3d(size_t x, size_t y, size_t z) : array(x*y*z) {}

    T & operator()(size_t x, size_t y, size_t z) {
        return array[x*size_y*size_z + y*size_z + z];
    }

    T const & operator()(size_t x, size_t y, size_t z) const {
        return array[x*size_y*size_z + y*size_z + z];
    }

private:
    std::vector<T> array;
};

array3d<float> buffnew(size_x, size_y, size_z);
buffnew(x,y,z) = 1.1f;
prediction = buffnew(x,y,z);

通过使用 std::vector 而不是邪恶的指针,该类是可复制的,并且会在销毁时自动释放内存。

关于c++ - 我如何读写 float 组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20376612/

相关文章:

c++ - 编译器忽略的指针运算

C# P/调用 : native output parameter value won't reach managed code

C++ 函数在不应该调用时被调用

c++ - 生成 LLVM C++ API 代码作为后端

c++ - 在类模板中找不到声明的类型

c++ - 使用 Boost Asio 建立 SSL 连接

c++ - 如何在字符串中使用符号?

c++ - 使用 C++ 接口(interface)的最佳方式

c++ - 引用动态分配的变量与指向同一动态分配变量的指针?

c++ - 如何从二进制文件中写入/读取特征矩阵