中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

3種C++/Qt遍歷多維數組的方法

發布時間:2023-08-28 17:33:41 來源:億速云 閱讀:106 作者:栢白 欄目:開發技術

今天小編給大家分享的是3種C++/Qt遍歷多維數組的方法,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

一、什么是多維數組

想要遍歷多維數組,就得知道什么是多維數組。

嚴格來說,C++語言中沒有多維數組,通常所說的多維數組其實是數組的數組。謹記這一點,對今后理解和使用多維數組大有益處。

當一個數組的元素仍然是數組時,通常使用兩個維度來定義它:一個維度表示數組本身大小,另外一個維度表示其元素(也是數組)大小:

int ia[3][4]; // 大小為3的數組,每個元素是含有4個int的數組
// 大小為10的數組,它的每個元素都是大小為20的數組
// 這些數組的元素是含有30個double的數組
double db[10][20][30] = {0}; // 將所有元素初始化為0

二、遍歷多維數組

先來定義一個多維數組:

// dobuleArrMulti是個大小為2的數組,它的每個元素都是大小為3的數組
// 這些數組的元素是含有4個double的數組
double doubleArrMulti[2][3][4] = {
        {
            {0,1,2,3},
            {4,5,6,7},
            {8,9,10,11}
        },
        {
            {12,13,14,15},
            {16,17,18,19},
            {20,21,22,23}
        }
    };

2.1 使用范圍for語句處理多維數組

要使用范圍for語句處理多維數組,除了最內層的循環外,其他所有循環的控制變量都應該是引用類型:

// 使用范圍for語句處理多維數組
for(auto &arr : doubleArrMulti) // 對于最外層數組的每一個元素
    for(auto &arow : arr)	    // 對于次外層數組的每一個元素
        for(auto acol : arow)  // 對于內層數組的每一個元素
            qDebug() << "范圍for遍歷:" + QString::number(acol); // 打印

2.2 使用指針遍歷多維數組

因為多維數組實際上是數組的數組,所以由多維數組名轉換得來的指針實際上是指向第一個內層數組的指針:

int ia[3][4];     // 大小為3的數組,每個元素是含有4個int的數組
int (*p)[4] = ia; // p指向含有4個int的數組
p = &ia[2];		  // p指向ia的尾元素

隨著C++11新標準的提出,通過使用auto或者decltype就能盡可能地避免在數組前面加上一個指針類型了:

// 使用指針遍歷多維數組
for(auto arr = doubleArrMulti; arr != doubleArrMulti+2; ++arr) // arr指向最外層數組首元素
    for(auto arow = *arr; arow != *arr+3; ++arow)			   // arow指向次外層數組首元素
        for(auto acol = *arow; acol!= *arow+4; ++acol)		   // acol指向內層數組首元素
            qDebug() << "指針遍歷:" + QString::number(*acol);  // 打印

當然,使用標準庫函數begin和end也能實現同樣的功能,而且看起來更簡潔一些:

// 使用指針遍歷多維數組
for(auto arr = std::begin(doubleArrMulti); arr != std::end(doubleArrMulti); ++arr)
    for(auto arow = std::begin(*arr); arow != std::end(*arr); ++arow)
        for(auto acol = std::begin(*arow); acol!= std::end(*arow); ++acol)
            qDebug() << "指針遍歷1:" + QString::number(*acol);

2.3 使用類型別名遍歷多維數組

類型別名簡化多維數組的指針讀、寫和理解一個指向多維數組的指針是一個讓人不勝其煩的工作,使用類型別名能讓這項工作變得簡單一點兒,例如:

using double_array1 = double[3][4]; // 新標準下的使用using的類型別名聲明
typedef double double_array2[4];    // 等價的使用typedef的類型別名聲明
for(double_array1 *da1 = doubleArrMulti; da1 != doubleArrMulti+2; ++da1)
    for(double_array2 *da2 = *da1; da2 != *da1+3; ++da2)
        for(double *d = *da2; d != *da2+4; ++d)
            qDebug() << "類型別名遍歷:"+QString::number(*d);

附:多維數組初始化

int arr[2][3],一般在函數體中使用,所以是在棧中分配內存的局部變量,未初始化時內存上存的是0xCCCCCCCC,它的補碼數即為-858993460。
int arr[2][3] = {0},為第一個元素賦值為0,其余元素由于沒給值,所以也賦值為0.
int arr[2][3] = {1},為第一個元素賦值為1,其余元素由于沒給值,所以賦值為0.
int arr[2][3] = {1,2,3,4},為前4個元素依次賦值為這些。(相當于把所有元素展開來數前4個)其余為0.
int arr[2][3] = { {1}, {2} },為每一行的首元素賦值。注意里面大括號的個數不能大于第一維度的大小。其余為0.
int arr[2][3] = { {1,2,3}, {4,5,6} },這是最完整的賦值。

關于3種C++/Qt遍歷多維數組的方法就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

抚顺县| 敦煌市| 特克斯县| 二连浩特市| 运城市| 永宁县| 南木林县| 玉林市| 光泽县| 景谷| 泗水县| 中阳县| 济源市| 唐山市| 赤壁市| 剑阁县| 商都县| 朝阳县| 洪江市| 镇远县| 太仆寺旗| 义马市| 浦北县| 岳池县| 和静县| 宁武县| 洪洞县| 布尔津县| 山阴县| 临西县| 平泉县| 洛浦县| 阳西县| 永丰县| 葫芦岛市| 临夏市| 宾阳县| 建平县| 措勤县| 台山市| 启东市|