什么是行,什么是列,是否有约定?
Is there a convention for what is a row and what is a column?
将矩阵构建视为向量的向量,例如以下内容
std::vector<std::vector<int>> M;
在这样的矩阵中索引一个值时,像 M[row][column]
或 M[column][row]
这样对大多数程序员来说更直观吗?
重要的是您如何访问数组。顺序内存访问通常比非顺序内存访问更快。因此,如果您在数组上使用 运行 某种算法,并且在其内部循环中,"row" 是常量,但 "column" 正在迭代,那么您希望列元素是连续的记忆。在您的矢量矢量的情况下,这意味着您希望内部矢量是 "column",因此您希望以 M[row][column]
.
的形式访问它
您可以随意解释:问题是您将外部向量 M 视为线向量还是列向量。 M[i][j]
则意味着 M
中 i
-st 向量中的第 j
-st 项。
C++ 程序员自然会倾向于使用 M[row][column]
。这是因为它对应于定义二维数组时数据在内存中的存储方式。例如:
int M[2][3] = { { 11,12,13}, {21,22,23} };
将存储在内存中,一行的元素连续存储(如列),一旦存储了该行,存储下一行:
11 12 13 21 22 23
或者如果您要固定显示宽度:
11 12 13
21 22 23
将矩阵构建视为向量的向量,例如以下内容
std::vector<std::vector<int>> M;
在这样的矩阵中索引一个值时,像 M[row][column]
或 M[column][row]
这样对大多数程序员来说更直观吗?
重要的是您如何访问数组。顺序内存访问通常比非顺序内存访问更快。因此,如果您在数组上使用 运行 某种算法,并且在其内部循环中,"row" 是常量,但 "column" 正在迭代,那么您希望列元素是连续的记忆。在您的矢量矢量的情况下,这意味着您希望内部矢量是 "column",因此您希望以 M[row][column]
.
您可以随意解释:问题是您将外部向量 M 视为线向量还是列向量。 M[i][j]
则意味着 M
中 i
-st 向量中的第 j
-st 项。
C++ 程序员自然会倾向于使用 M[row][column]
。这是因为它对应于定义二维数组时数据在内存中的存储方式。例如:
int M[2][3] = { { 11,12,13}, {21,22,23} };
将存储在内存中,一行的元素连续存储(如列),一旦存储了该行,存储下一行:
11 12 13 21 22 23
或者如果您要固定显示宽度:
11 12 13
21 22 23