「C ++入門書」リーディングノート-第06章多次元配列

著者:Ma Zhifeng
リンク:https://zhuanlan.zhihu.com/p/23579860
出典:
著者がほぼ著作権を所有していることを知ってい ます。商用の再版については、著者に連絡して許可を得てください。非商用の再版については、出典を示してください。

ステートメント:

  • 記事の内容は「C ++ Primer Chinese Edition(5th Edition)」から収集・編集されたものであり、著作権は原本に帰属します。
  • オリジナルの本はより詳細で素晴らしい解釈を持っています、学習のために本物の本を購入してください。
  • この記事は学習とコミュニケーションのみを目的としており、いかなる形式の転載も禁止されています

多次元配列は実際には配列の配列です

int ia[3][4];

裏返しに読む:iaは3つの要素を持つ配列であり、各要素は4つの整数を持つ配列です

初期化

int ia[3][4] = {
      
       {
      
      0, 1, 2, 3}, {
      
      4, 5, 6, 7}, {
      
      8, 9, 10, 11} };

基本的に、1次元配列の初期化に違いはありません。iaには3つの要素があるため、外側の中括弧の内側に3つの中括弧があり、各中括弧はiaの要素を初期化するために使用されます。

1次元配列と同様に、初期値の一部のみを指定することもできます。

int ix[3][4] = {
      
       {
      
      0}, {
      
      4}, {
      
      8} };  

int ia[3][4] = {
      
       0 3 6 9 };

添字

ia [2] [3]は、iaの2番目の要素(配列)の3番目の要素を返します。

ia [1]はia(配列)の最初の要素を返します

多次元配列は実際には配列の配列であることを理解することに注意してください。

の範囲

forループと範囲を使用して多次元配列をトラバースできます

のスコープを使用する場合は、制御変数を参照型として宣言するのが最適です。

size_t cnt = 0;  
for( auto &row : ia )  
{
      
        
    for( auto &col : row )  
    {
      
        
        col = cnt;  
        ++cnt;  
    }  
}

参照型として宣言されていない場合

for( auto row : ia )  
    for( auto col : row )

最初の行は、配列型であるiaの各要素を取ります。これは、コンパイラーによって最初の要素へのポインターに変換され、2行目にエラーが報告されます。

したがって、最も内側のループのみが参照型を使用できません

簡単にするために、参照型を使用するのが最善です

ポインタと多次元配列

多次元配列の配列名も自動的にポインタに変換されます

int ia[3][4];  
auto p = ia;

プロセスを理解する:

  1. iaは3つの要素を持つ配列です
  2. その各要素は、4つの要素を含む配列です。
  3. したがって、その最初の要素も4つの要素を含む配列です
  4. 最初の要素へのポインターは、4つの要素を持つ配列へのポインターです。

に相当

int (*p)[4] = ia;

各要素をループします

for( auto p = ia; p != ia + 3; ++p )  
{
      
        
    for( auto q = *p; q != *p + 4; ++ q )  
    {
      
        
        cout << *q << ' ';   
    }  
    cout << endl;  
}

pを逆参照して、4つの要素を含む配列を取得します。* pは最初の要素へのポインターです。

開始関数と終了関数を使用することもできます

for( auto p = begin(ia); p != end(ia); ++p )  
{
      
        
    for( auto q = begin(*p); q != end(*p); ++ q )  
    {
      
        
        cout << *q << ' ';   
    }  
    cout << endl;  
}

タイプエイリアスを使用して書き込みを簡素化する

using int_array = int[4];  
typedef int int_array[4];

typedefの形式は変数宣言に似ていることを忘れないでください

おすすめ

転載: blog.csdn.net/qq_26751117/article/details/53156001