最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++/Qt遍歷多維數(shù)組的3種方式示例

 更新時(shí)間:2023年05月13日 10:03:41   作者:cgsthtm  
一維數(shù)組對(duì)于存儲(chǔ)和處理一組數(shù)據(jù)很有用,但有時(shí)候,有必要使用多維數(shù)組,下面這篇文章主要給大家介紹了關(guān)于C++/Qt遍歷多維數(shù)組的3種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、什么是多維數(shù)組

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

嚴(yán)格來(lái)說(shuō),C++語(yǔ)言中沒(méi)有多維數(shù)組,通常所說(shuō)的多維數(shù)組其實(shí)是數(shù)組的數(shù)組。謹(jǐn)記這一點(diǎn),對(duì)今后理解和使用多維數(shù)組大有益處。

當(dāng)一個(gè)數(shù)組的元素仍然是數(shù)組時(shí),通常使用兩個(gè)維度來(lái)定義它:一個(gè)維度表示數(shù)組本身大小,另外一個(gè)維度表示其元素(也是數(shù)組)大?。?/p>

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

二、遍歷多維數(shù)組

先來(lái)定義一個(gè)多維數(shù)組:

// dobuleArrMulti是個(gè)大小為2的數(shù)組,它的每個(gè)元素都是大小為3的數(shù)組
// 這些數(shù)組的元素是含有4個(gè)double的數(shù)組
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語(yǔ)句處理多維數(shù)組

要使用范圍for語(yǔ)句處理多維數(shù)組,除了最內(nèi)層的循環(huán)外,其他所有循環(huán)的控制變量都應(yīng)該是引用類型:

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

2.2 使用指針遍歷多維數(shù)組

因?yàn)槎嗑S數(shù)組實(shí)際上是數(shù)組的數(shù)組,所以由多維數(shù)組名轉(zhuǎn)換得來(lái)的指針實(shí)際上是指向第一個(gè)內(nèi)層數(shù)組的指針:

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

隨著C++11新標(biāo)準(zhǔn)的提出,通過(guò)使用auto或者decltype就能盡可能地避免在數(shù)組前面加上一個(gè)指針類型了:

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

當(dāng)然,使用標(biāo)準(zhǔn)庫(kù)函數(shù)begin和end也能實(shí)現(xiàn)同樣的功能,而且看起來(lái)更簡(jiǎn)潔一些:

// 使用指針遍歷多維數(shù)組
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 使用類型別名遍歷多維數(shù)組

類型別名簡(jiǎn)化多維數(shù)組的指針讀、寫(xiě)和理解一個(gè)指向多維數(shù)組的指針是一個(gè)讓人不勝其煩的工作,使用類型別名能讓這項(xiàng)工作變得簡(jiǎn)單一點(diǎn)兒,例如:

using double_array1 = double[3][4]; // 新標(biāo)準(zhǔn)下的使用using的類型別名聲明
typedef double double_array2[4];    // 等價(jià)的使用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);

附:多維數(shù)組初始化

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

總結(jié)

到此這篇關(guān)于C++/Qt遍歷多維數(shù)組的3種方式的文章就介紹到這了,更多相關(guān)C++ Qt遍歷多維數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)循環(huán)順序隊(duì)列

    C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)循環(huán)順序隊(duì)列

    這篇文章主要介紹了 C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)循環(huán)順序隊(duì)列的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++ 內(nèi)存分配處理函數(shù)set_new_handler的使用

    C++ 內(nèi)存分配處理函數(shù)set_new_handler的使用

    這篇文章主要介紹了C++ 內(nèi)存分配處理函數(shù)set_new_handler的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 總結(jié)UNIX/LINUX下C++程序計(jì)時(shí)的方法

    總結(jié)UNIX/LINUX下C++程序計(jì)時(shí)的方法

    本文總結(jié)了下UNIX/LINUX下C++程序計(jì)時(shí)的一些函數(shù)和方法,對(duì)日常使用C++程序的朋友很有幫助,有需要的小伙伴們可以參考學(xué)習(xí),下面一起來(lái)看看吧。
    2016-08-08
  • C語(yǔ)言字符串操作總結(jié)大全(超詳細(xì))

    C語(yǔ)言字符串操作總結(jié)大全(超詳細(xì))

    本篇文章是對(duì)C語(yǔ)言字符串操作進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言中枚舉與指針的實(shí)例詳解

    C語(yǔ)言中枚舉與指針的實(shí)例詳解

    這篇文章主要介紹了 C語(yǔ)言中枚舉與指針的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能夠掌握枚舉與指針的知識(shí),需要的朋友可以參考下
    2017-09-09
  • C++ Assert()斷言機(jī)制原理以及使用方法

    C++ Assert()斷言機(jī)制原理以及使用方法

    下面小編就為大家?guī)?lái)一篇C++ Assert()斷言機(jī)制原理以及使用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C++map,set,multiset,multimap詳細(xì)解析

    C++map,set,multiset,multimap詳細(xì)解析

    在C++標(biāo)準(zhǔn)模板庫(kù)(STL)中,容器分為關(guān)聯(lián)式容器和序列式容器兩大類,關(guān)聯(lián)式容器主要包括set、map、multiset和multimap,通過(guò)索引來(lái)訪問(wèn)元素,本文給大家介紹C++?map,set,multiset,multimap的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • VSCode (Visual Studio Code) V1.43.0下載并設(shè)置成中文語(yǔ)言的方法

    VSCode (Visual Studio Code) V1.43.0下載并設(shè)置成中文語(yǔ)言的方法

    Visual Studio Code是一款免費(fèi)開(kāi)源的現(xiàn)代化輕量級(jí)代碼編輯器,支持語(yǔ)法高亮、智能代碼補(bǔ)全、自定義熱鍵、括號(hào)匹配、代碼片段、代碼對(duì)比 Diff、GIT 等特性,這篇文章主要介紹了VSCode (Visual Studio Code) V1.43.0下載并設(shè)置成中文語(yǔ)言,需要的朋友可以參考下
    2020-03-03
  • C/C++運(yùn)用WMI接口實(shí)現(xiàn)查詢系統(tǒng)信息

    C/C++運(yùn)用WMI接口實(shí)現(xiàn)查詢系統(tǒng)信息

    Windows?Management?Instrumentation(WMI)是一種用于管理和監(jiān)視Windows操作系統(tǒng)的框架,本文主要介紹了如何運(yùn)用WMI接口實(shí)現(xiàn)查詢系統(tǒng)信息,感興趣的可以了解下
    2023-11-11
  • 最大子矩陣問(wèn)題實(shí)例解析

    最大子矩陣問(wèn)題實(shí)例解析

    這篇文章主要介紹了最大子矩陣問(wèn)題實(shí)例解析,分別列舉了Java和C語(yǔ)言的相關(guān)實(shí)現(xiàn),需要的朋友可以參考下
    2015-08-08

最新評(píng)論

SHOW| 汤原县| 涟水县| 自治县| 娄底市| 赤城县| 吉林省| 临武县| 安泽县| 晋城| 哈尔滨市| 旬邑县| 绥棱县| 博湖县| 广安市| 顺昌县| 金阳县| 廊坊市| 香港| 长泰县| 额济纳旗| 梓潼县| 镇坪县| 祁东县| 乐陵市| 宁海县| 东安县| 阳曲县| 富宁县| 始兴县| 苏州市| 军事| 武威市| 三江| 江源县| 那坡县| 棋牌| 北京市| 江北区| 泌阳县| 边坝县|