如何使用std :: valarray存储/操作2D数组?
我想看一个2D数组的例子,其中的元素由行/列索引访问.像这样的伪代码:
matrix(i,j) = 42;
如何初始化这样一个数组的例子也不错.
我已经知道Boost.MultiArray,Boost.uBlas和Blitz.
随意回答为什么我不应该使用valarray作为我的用例.但是,我希望多维数组的内存是连续的(列x行)块.没有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_array,std :: gslice_array,std :: mask_array和std :: indirect_array.