我是编程新手。
用户将输入2D数组的大小,然后我想将此数组传递给函数。我怎么能这样做?
答案 0 :(得分:1)
有两种方法可以实现目标。
第一种方式使用动态分配的C风格数组。除非您被迫支持现有代码,否则不应该在C ++中执行此操作。但在这种情况下,最好考虑重构,也许。
第二种方式正在使用std::vector
。该类用内存封装低级操作。它将使您摆脱许多潜在的错误。
为了向您展示std::vector
的优点,我写了两个程序。他们输入2D数组的大小(换句话说,它被称为矩阵)并创建它。
使用C风格的数组创建矩阵需要使用指针进行大量代码和操作。 为简单起见,以下代码不处理异常。在实际代码中,您应该这样做以避免内存泄漏,但代码会变得更难。
#include <iostream>
#include <cstddef>
using namespace std;
void function(int** matrix, size_t nrows, size_t ncols)
{
}
int main()
{
size_t nrows;
size_t ncols;
cin >> nrows >> ncols;
// allocate memory for matrix
int** matrix = new int*[nrows];
for (size_t i = 0; i < nrows; ++i)
matrix[i] = new int[ncols];
function(matrix, nrows, ncols);
// release memory
for (size_t i = 0; i < nrows; ++i)
delete[] matrix[i];
delete[] matrix;
}
因此在C ++中使用std::vector
会更容易。由于std::vector
是一个类,它有构造函数和析构函数封装分配和释放内存。
#include <iostream>
#include <vector>
using namespace std;
void function(vector<vector<int>>& matrix)
{
}
int main()
{
size_t nrows;
size_t ncols;
cin >> nrows >> ncols;
// create matrix
vector<vector<int>> matrix(nrows);
for (size_t i = 0; i < nrows; ++i)
matrix[i] = vector<int>(ncols);
// you don't even need to pass sizes of matrix
function(matrix);
// automatically called destructor of matrix releases memory
}