c++ - 如何使用 std::valarray 来存储/操作连续的二维数组?

标签 c++ multidimensional-array c++-standard-library

如何使用 std::valarray 来存储/操作二维数组?

我想看一个二维数组的例子,其中的元素由行/列索引访问。像这样的伪代码:

matrix(i,j) = 42;

如何初始化这样一个数组的例子也很好。

我已经知道 Boost.MultiArray、Boost.uBlas 和 Blitz++。

请随意回答为什么我不应该在我的用例中使用 valarray。但是,我希望多维数组的内存是一个连续的(列 x 行) block 。没有 Java 风格的嵌套数组。

最佳答案

在我的脑海中:

template <class element_type>
class matrix
{
public:
    matrix(size_t width, size_t height): m_stride(width), m_height(height), m_storage(width*height) {  }

    element_type &operator()(size_t row, size_t column)
    {
        // column major
        return m_storage[std::slice(column, m_height, m_stride)][row];

        // row major
        return m_storage[std::slice(row, m_stride, m_height)][column];
    }

private:
    std::valarray<element_type> m_storage;
    size_t m_stride;
    size_t m_height;
};

std::valarray 提供了许多有趣的方式来访问元素,通过切片、掩码、多维切片或间接表。参见 std::slice_arraystd::gslice_arraystd::mask_arraystd::indirect_array更多详情。

关于c++ - 如何使用 std::valarray 来存储/操作连续的二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187648/

相关文章:

c - C中的三维字符数组

linq - 通过 LINQ 生成二维数组

c++ - 无法使用 end() 获取 map 的第二个字段

c++ - Clang 3.1 + libc++ 编译错误

c++ - 异步事件 : already defined linker error [Windows Update API]

c++ - 解释器 : Handling includes/imports

c++ - 在使用 ceil 的 C++ 中,除法不起作用?

c - 数组2D到1D的转换和混淆

c++ - 我可以获得适用于任何数字类型的模板化均匀分布生成器吗?

php - 编译 swig 界面后缺少符号