日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何優(yōu)雅的實現(xiàn)多維數(shù)組
int native_arr[3];
std::array arr;

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

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供玉田網(wǎng)站建設(shè)、玉田做網(wǎng)站、玉田網(wǎng)站設(shè)計、玉田網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、玉田企業(yè)網(wǎng)站模板建站服務(wù),10余年玉田做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

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

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

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

std::array, 3> multi_array;

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

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

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

template 
using TwoDimMatrix = std::array, R>;

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

void test_two_dim_matrix() {
constexpr size_t row = 2;
constexpr size_t col = 3;
TwoDimMatrix 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ù)來實現(xiàn),直接上代碼吧:

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;
}
}
}
}
}

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


網(wǎng)站欄目:如何優(yōu)雅的實現(xiàn)多維數(shù)組
鏈接分享:http://www.5511xx.com/article/dpjeojh.html