如何优雅的实现多维数组

IT科技2025-11-05 08:39:003894

数组,何优想必大家都知道,实现数组大体长这样:

int native_arr[3];

如何优雅的实现多维数组

std::array<int,何优 3> arr;

那二维数组呢,假如我需要定义一个3行4列的实现数组数组,是何优不是这样:

int multi_array_native[3][4];

std::array<std::array<int, 3>, 4> multi_array;

第一眼看上去,貌似没啥毛病。实现数组

但其实不对,何优上面的实现数组multi_array其实是个4行3列的数组,然而这才是何优个正确的3行4列的数组:

std::array<std::array<int, 4>, 3> multi_array;

这块其实就很容易写出不容易发现的服务器托管bug,可能二维数组还好一些,实现数组如果是何优多维数组,更难办。实现数组

那有没有办法,何优正常的实现数组使用std::array实现多维数组呢?

肯定有,就是何优利用好模板元编程技巧,这里先来实现个二维数组:

template

using TwoDimMatrix = std::array<std::array<T, C>, R>;

其实就是将反直觉的R和C调换个顺序,使用方式如下:

void test_two_dim_matrix() {

constexpr size_t row = 2;

constexpr size_t col = 3;

TwoDimMatrixmat;

int k = 0;

for (int i = 0; i < row; ++i) {

for (int j = 0; j < col; ++j) {

mat[i][j] = ++k;

}

}

}

使用TwoDimMatrix,就可以正常的定义二维数组,而无需反常规的源码下载按相反顺序定义数组。

定义好了二维数组,那三维、四维、五维数组如何定义?难道要像上面一样,定义出ThreeDimMatrix、FourDimMatrix?

肯定不能这样,那可是太麻烦了,也不通用。

这里可能利用模板的可变参数来实现,直接上代码吧:

template

struct Matrix {

using Col = typename Matrix::type;

using type = std::array;

};

template

struct Matrix{

using type = std::array;

};

使用方式如下:

void test_multi_array() {

constexpr size_t a = 2;

constexpr size_t b = 3;

constexpr size_t c = 4;

constexpr size_t d = 5;

Matrix::type mat;

int u = 0;

for (int i = 0; i < a; ++i) {

for (int j = 0; j < b; ++j) {

for (int k = 0; k < c; ++k) {

for (int m = 0; m < d; ++m) {

mat[i][j][k][m] = ++u;

}

}

}

}

}

看,这样就方便多了吧,这样就可以使用常规的方式定义正确的多维数组啦。企商汇

本文地址:http://www.bzuk.cn/html/126e31599558.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

Pixelbook教程(探索Pixelbook的功能与技巧,体验极致的电脑操作体验)

大道至简:Angular2只有一个核心概念

JavaScript异步编程之jsdeferred原理解析

人工智能如何撩起下一波创业高潮?

优盘PE系统安装教程(打造高效便捷的移动操作系统,提升工作效率)

BG-UI:一个后台UI框架

如何用vue实现模态框组件

为什么说要搞定微服务架构,先搞定RPC框架?

友情链接

滇ICP备2023006006号-33