在 C++ 中,如何将二维数组作为参数传递给函数并且该函数返回一个二维数组?
如果我有一个这样定义的数组:
struct Hello
{
int a;
int b;
};
Hello hello[3][3] = {.......};
如何在函数中返回上面的数组?
答案取决于二维数组的含义。
C++ 的方式是有一个std::vector<std::vector<Type> >
,在这种情况下,答案是这样的
typedef std::vector<std::vector<myType> > Array2D;
Array2D f(const Array2D& myArray)
{
}
如果您已动态分配数组,Type**
如
Type** p = new Type*(n);
for(int i = 0; i < n; ++i)
{
p[i] = new Type(m);
}
那么您可以简单地将 Type** 与尺寸一起传递。
... f(Type** matrix, int n, int m);
如果你有一个普通的二维数组
Type matrix[N][M];
那么你可以将它作为
template<int N, int M>
... f(Type (&matrix)[N][M]);
我故意将前面两个示例中的返回类型留空,因为它取决于您返回的内容(传递的数组或新创建的数组)和所有权策略。
Hello(&f(Hello(&In)[3][3])) [3][3] {
//operations
return In;
}
难以阅读(推荐使用 typedef),但您可以这样做:
Hello(&f(Hello(&A)[3][3])) [3][3] {
// do something with A
return A;
}
如果这是同一个数组,您实际上不需要返回。而是返回void
- 语法会简单得多。
我会这样做...
typedef std::vector< int > vectorOfInts;
typedef std::vector< vectorOfInts > vectorOfVectors;
vectorOfVectors g( const vectorOfVectors & voi ) {
std::for_each( voi.begin(), voi.end(), [](const vectorOfInts &vi) {
std::cout<<"Size: " << vi.size() << std::endl;
std::for_each( vi.begin(), vi.end(), [](const int &i) {
std::cout<<i<<std::endl;
} );
} );
vectorOfVectors arr;
return arr;
}
int main()
{
vectorOfVectors arr( 10 );
arr[0].push_back( 1 );
arr[1].push_back( 2 );
arr[1].push_back( 2 );
arr[3].push_back( 3 );
arr[3].push_back( 3 );
arr[3].push_back( 3 );
g( arr );
return 0;
}