我该如何使用<array>头文件声明一个二维数组?

3

我知道如何声明一个二维数组,就像这样:

int arr[5][5];

但我希望用不同的方式来实现,就像我们声明一维数组一样:

array<int, 5> arr;

如何使用数组的第二种声明方法声明二维数组?

你可以按照(好的)答案所示的方法来做,或者你可以只声明一个正确大小的一维数组,但是将其用作二维数组。这总是一个选择。 - Jesper Juhl
1
参考文档应该足够清晰地解释一切。 - πάντα ῥεῖ
3个回答

10
作为一个数组的数组,就像这样:
std::array<std::array<int, 5>, 5> arr;

很遗憾没有“短”语法,但你可以创建一个:

template <class T, std::size_t rows, std::size_t cols>
using two_dim_array = std::array<std::array<T, cols>, rows>;

two_dim_array<int, 5, 5> arr;

使用直接嵌套的std::array时,大小的顺序array<array<int, n_columns>, n_rows>与使用a[i_row][i_column]时的索引相反。使用您的two_dim_array时,声明的顺序与索引的顺序相同,这很好,但不够清晰。我没有好的解决方案来提高清晰度,但我喜欢一个折衷的符号,它也有正确的顺序,但为了不固定冗长性,增加了一些声明的清晰度:array_of<n_rows, array_of<n_columns, int>> - Cheers and hth. - Alf

4
array<array<int, 5>, 5> arr;

如果不是因为啰嗦且误导性的文本,我会给这个点赞(就像我给atb现在已删除的回答一样)。去掉这些文本,你就能得到我的+1。;-) - Cheers and hth. - Alf
@cheers - 好的,Alf,简短明了?我也投票支持恢复atb的答案。 - Bo Persson
没错。 :) +1 ]]]]]] - Cheers and hth. - Alf

1
你需要声明一个二维数组。
std::array<std::array<int, 5>, 5> arr;

如果您不确定数组的大小,最好声明一个二维向量

vector<vector<data_type>> 2dMatrix;

如果您知道二维矩阵的大小,那么可以这样声明。
vector<vector<data_type>> 2dMatrix(row,vector<data_type>(column));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接