我有一个数组int matrix[10][10]
以及其他具有相似大小的数组,它们在原型函数和main函数之前声明。所有功能都使用这个2d数组。但是,我需要我的程序有一个函数,询问用户他想要的矩阵的大小。所以,它必须是这样的:int matrix[ROWS][COLUMNS]
。我确定无法将数组声明为main函数,因为所有其他函数都使用此数组。我如何声明这种数组?
答案 0 :(得分:2)
首先,不可能声明array with variable sizes,因为它们在C ++中不合法(尽管它们在C中是合法的)。所以你在这里运气不好。
其次,您需要main
之前的声明。因此,你必须使用
动态数组,全局定义为int** matrix;
,并在main()
中初始化为
matrix = new int*[ROWS];
for(size_t i = 0 ; i < ROWS; ++i)
matrix[i] = new int[COLS];
那么你必须在一天结束时释放它的记忆
for(size_t i = 0; i < ROWS; ++i)
delete[] matrix[i];
delete[] matrix;
或
std::vector<int> matrix; // defined globally
并在main()
为其保留内存,例如
matrix.reserve(ROWS*COLUMNS); // reserve memory for M rows
然后你需要使用索引,这样你就可以从索引对映射到1D索引,即“逻辑”元素[i][j]
由i * COLS + j
中的索引matrix
表示。 {1}}。
当然,您可以使用std::vector<std::vector<int>>
,但这种方法更快,因为内存保证是连续的(同样适用于第一个示例,您可以使用int*
代替)。