欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

先來定義一個多維數(shù)組:

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

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

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

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

因為多維數(shù)組實際上是數(shù)組的數(shù)組,所以由多維數(shù)組名轉(zhuǎn)換得來的指針實際上是指向第一個內(nèi)層數(shù)組的指針:

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

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

// 使用指針遍歷多維數(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)然,使用標準庫函數(shù)begin和end也能實現(xià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ù)組

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

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

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

int arr[2][3],一般在函數(shù)體中使用,所以是在棧中分配內(nèi)存的局部變量,未初始化時內(nèi)存上存的是0xCCCCCCCC,它的補碼數(shù)即為-858993460。
int arr[2][3] = {0},為第一個元素賦值為0,其余元素由于沒給值,所以也賦值為0.
int arr[2][3] = {1},為第一個元素賦值為1,其余元素由于沒給值,所以賦值為0.
int arr[2][3] = {1,2,3,4},為前4個元素依次賦值為這些。(相當(dāng)于把所有元素展開來數(shù)前4個)其余為0.
int arr[2][3] = { {1}, {2} },為每一行的首元素賦值。注意里面大括號的個數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Libmicrohttpd搭建內(nèi)嵌(本地)服務(wù)器的方法

    使用Libmicrohttpd搭建內(nèi)嵌(本地)服務(wù)器的方法

    下面小編就為大家?guī)硪黄褂肔ibmicrohttpd搭建內(nèi)嵌(本地)服務(wù)器的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • C語言中自定義類型詳解

    C語言中自定義類型詳解

    大家好,本篇文章主要講的是C語言中自定義類型詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++?pimpl機制詳細講解

    C++?pimpl機制詳細講解

    PIMPL?是?C++?中的一個編程技巧,意思為指向?qū)崿F(xiàn)的指針。具體操作是把類的實現(xiàn)細節(jié)放到一個單獨的類中,并用一個指針進行訪問
    2022-08-08
  • C 語言基礎(chǔ)之C語言的常見關(guān)鍵字

    C 語言基礎(chǔ)之C語言的常見關(guān)鍵字

    C語言中有一些預(yù)先定義的字符串,他們本身被賦予了自身的功能。并且我們在定義變量的時候,不能去搶他們的名字來用。他們就是今天的主角:關(guān)鍵字,下面文章將給大家做詳細介紹
    2021-09-09
  • C++使用chrono庫處理日期和時間的實現(xiàn)方法

    C++使用chrono庫處理日期和時間的實現(xiàn)方法

    C++11 中提供了日期和時間相關(guān)的庫 chrono,通過 chrono 庫可以很方便地處理日期和時間,本文主要介紹了C++使用chrono庫處理日期和時間的實現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++文件的數(shù)據(jù)寫入和文件的數(shù)據(jù)讀取的方法實現(xiàn)

    C++文件的數(shù)據(jù)寫入和文件的數(shù)據(jù)讀取的方法實現(xiàn)

    本文主要介紹了C++文件的數(shù)據(jù)寫入和文件的數(shù)據(jù)讀取的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語言動態(tài)內(nèi)存分配圖文講解

    C語言動態(tài)內(nèi)存分配圖文講解

    給數(shù)組分配多大的空間?你是否和初學(xué)C時的我一樣,有過這樣的疑問。這一期就來聊一聊動態(tài)內(nèi)存的分配,讀完這篇文章,你可能對內(nèi)存的分配有一個更好的理解
    2023-01-01
  • VSCode插件開發(fā)全攻略之package.json詳解

    VSCode插件開發(fā)全攻略之package.json詳解

    這篇文章主要介紹了VSCode插件開發(fā)全攻略之package.json的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C語言野指針及如何規(guī)避詳解

    C語言野指針及如何規(guī)避詳解

    這篇文章主要為大家介紹了C語言野指針及如何規(guī)避詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • QT5?Thread線程的具體實現(xiàn)

    QT5?Thread線程的具體實現(xiàn)

    本文主要介紹了QT5?Thread線程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評論