成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優(yōu)雅的實(shí)現(xiàn)多維數(shù)組

開發(fā) 前端
定義好了二維數(shù)組,那三維、四維、五維數(shù)組如何定義?難道要像上面一樣,定義出ThreeDimMatrix、FourDimMatrix?肯定不能這樣,那可是太麻煩了,也不通用。

數(shù)組,想必大家都知道,大體長這樣:

int native_arr[3];
std::array<int, 3> arr;

那二維數(shù)組呢,假如我需要定義一個(gè)3行4列的數(shù)組,是不是這樣:

int multi_array_native[3][4];
std::array<std::array<int, 3>, 4> multi_array;

第一眼看上去,貌似沒啥毛病。

但其實(shí)不對(duì),上面的multi_array其實(shí)是個(gè)4行3列的數(shù)組,然而這才是個(gè)正確的3行4列的數(shù)組:

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

這塊其實(shí)就很容易寫出不容易發(fā)現(xiàn)的bug,可能二維數(shù)組還好一些,如果是多維數(shù)組,更難辦。

那有沒有辦法,正常的使用std::array實(shí)現(xiàn)多維數(shù)組呢?

肯定有,就是利用好模板元編程技巧,這里先來實(shí)現(xiàn)個(gè)二維數(shù)組:

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

其實(shí)就是將反直覺的R和C調(diào)換個(gè)順序,使用方式如下:

void test_two_dim_matrix() {
constexpr size_t row = 2;
constexpr size_t col = 3;
TwoDimMatrix<int, row, col> mat;
int k = 0;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
mat[i][j] = ++k;
}
}
}

使用TwoDimMatrix,就可以正常的定義二維數(shù)組,而無需反常規(guī)的按相反順序定義數(shù)組。

定義好了二維數(shù)組,那三維、四維、五維數(shù)組如何定義?難道要像上面一樣,定義出ThreeDimMatrix、FourDimMatrix?

肯定不能這樣,那可是太麻煩了,也不通用。

這里可能利用模板的可變參數(shù)來實(shí)現(xiàn),直接上代碼吧:

template <typename T, size_t R, size_t... C>
struct Matrix {
using Col = typename Matrix<T, C...>::type;
using type = std::array<Col, R>;
};

template <typename T, size_t R>
struct Matrix<T, R> {
using type = std::array<T, R>;
};

使用方式如下:

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<int, a, b, c, d>::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;
}
}
}
}
}

看,這樣就方便多了吧,這樣就可以使用常規(guī)的方式定義正確的多維數(shù)組啦。

責(zé)任編輯:武曉燕 來源: 程序喵大人
相關(guān)推薦

2020-08-26 07:17:19

通信

2010-10-08 13:21:03

JavaScript多維數(shù)組

2024-01-17 10:16:22

前端國際化消息鍵

2023-01-31 10:29:26

JavaScript國際化國際化庫

2011-06-08 15:21:18

多維數(shù)組

2009-11-25 14:44:34

PHP函數(shù)array_

2020-08-24 13:35:59

trycatchJava

2024-12-18 12:10:00

2023-10-27 08:20:12

springboot微服務(wù)

2009-09-16 09:01:40

C#多維數(shù)組

2011-06-08 14:42:33

C++多維數(shù)組

2021-05-12 22:07:43

并發(fā)編排任務(wù)

2022-06-04 12:25:10

解密加密過濾器

2022-11-15 07:50:47

ORM鏈?zhǔn)讲僮?/a>刪除

2022-11-11 07:48:56

ORM鏈?zhǔn)?/a>輪播圖

2009-09-17 16:36:59

C#一維數(shù)組C#多維數(shù)組

2011-07-04 11:05:03

數(shù)組java

2020-12-08 08:08:51

Java接口數(shù)據(jù)

2010-03-15 13:17:00

Python多維數(shù)組

2009-11-20 09:24:10

PHP多維數(shù)組排序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜久久久久 | av影音在线 | 四虎成人在线播放 | 国产丝袜一区二区三区免费视频 | 欧美一区二区三区在线 | 亚洲国产一区二区视频 | 欧美一区视频 | 成人欧美一区二区三区在线观看 | 久久精品视频在线播放 | 国产精品久久久久久吹潮 | 最新中文字幕在线 | a黄在线观看 | 欧美一区两区 | 成人av一区 | 夜夜爽99久久国产综合精品女不卡 | 日本视频中文字幕 | 欧美色图综合网 | 精品毛片视频 | 欧美国产日韩在线 | 日韩和的一区二区 | 国产精品美女久久久免费 | 日韩视频高清 | 中文成人无字幕乱码精品 | 精品久久久久久久久久 | 麻豆国产一区二区三区四区 | 亚洲男女视频在线观看 | 欧美在线资源 | 精品自拍视频在线观看 | 久久久久久国产 | 高清视频一区二区三区 | 成人三级网址 | av激情在线 | 艹逼网| 国产精品自产拍在线观看蜜 | 精品视频免费 | 人干人操 | 在线91 | 蜜桃黄网 | av在线免费观看网站 | 日本亚洲精品成人欧美一区 | 欧美日韩久久久 |