固定大小的原始陣列矩陣(即 2D 原始陣列)

// A fixed size raw array matrix (that is, a 2D raw array).
#include <iostream>
#include <iomanip>
using namespace std;

auto `main()` -> int
{
    int const   n_rows  = 3;
    int const   n_cols  = 7;
    int const   m[n_rows][n_cols] =             // A raw array matrix.
    {
        {  1,  2,  3,  4,  5,  6,  7 },
        {  8,  9, 10, 11, 12, 13, 14 },
        { 15, 16, 17, 18, 19, 20, 21 }
    };
    
    for( int y = 0; y < n_rows; ++y )
    {
        for( int x = 0; x < n_cols; ++x )
        {
            cout << setw( 4 ) << m[y][x];       // Note: do NOT use m[y,x]!
        }
        cout << '\n';
    }
}

輸出:

   1   2   3   4   5   6   7
   8   9  10  11  12  13  14
  15  16  17  18  19  20  21

C++不支援索引多維陣列的特殊語法。相反,這樣的陣列被視為一個陣列陣列(可能是陣列,依此類推),並且普通的單個索引符號 [ i ] 用於每個級別。在上面的示例中,m[y] 指的是 m 的行 y,其中 y 是從零開始的索引。然後可以依次索引這一行,例如 m[y][x],它指的是行 y第 9 項 - 或列。

即最後一個索引變化最快,並且在宣告中,此索引的範圍(此處是每行的列數)是指定的最後一個和最內部大小。

由於 C++不提供動態大小陣列的內建支援,除動態分配外,動態大小矩陣通常作為類實現。然後原始陣列矩陣索引符號 m[y][x] 有一些成本,要麼通過暴露實現(以便例如轉換矩陣的檢視實際上變得不可能),要麼通過從 operator[] 返回代理物件來增加一些開銷和輕微不便。因此,這種抽象的索引符號通常會在外觀和索引的順序上不同,例如 m(x,y)m.at(x,y)m.item(x,y)