C++ 固定大小的原始数组矩阵(即2D原始数组)。

示例

// 固定大小的原始数组矩阵(即2D原始数组)。
#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] =             // 原始数组矩阵。
    {
        {  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];       // 注意:请勿使用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 ++不支持索引多维数组的特殊语法。而是将这样的数组视为数组的数组(可能是数组的数组,依此类推),并且每个级别都使用普通的单索引符号。在上面的例子中是指行的,在那里是从零开始的索引。然后可以依次索引该行,例如,它指向row的第一个项目或一个列。[i]m[y]ymym[y][x]xy

也就是说,最后一个索引变化最快,在声明中,该索引的范围(这里是每行的列数)是指定的最后一个和“最里面”的大小。

由于C ++不提供对动态大小数组的内置支持,除了动态分配以外,动态大小矩阵通常作为一个类来实现。然后m[y][x],通过公开实现(这样实际上就不可能实现转置矩阵的视图),或者通过从中返回代理对象来增加原始开销和轻微的不便,原始数组矩阵的索引符号会带来一些成本operator[]。所以对于这样一个抽象的符号索引可以,并且通常是不同的,无论是在外观和感觉和指标,例如顺序m(x,y)或或。m.at(x,y)m.item(x,y)