在C ++中,如何在函数中传递二维数组作为参数,这个函数返回一个二维数组?
如果我有一个像这样定义的数组:
struct Hello
{
int a;
int b;
};
Hello hello[3][3] = {.......};
如何在函数中返回上面的数组?
答案 0 :(得分:4)
答案取决于你对二维数组的意思。
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]);
我故意将前两个示例中的返回类型留空,因为它取决于您返回的内容(传递的数组或新创建的数组)和所有权策略。
答案 1 :(得分:4)
Hello(&f(Hello(&In)[3][3])) [3][3] {
//operations
return In;
}
答案 2 :(得分:1)
难以阅读(建议使用typedef),但您可以这样做:
Hello(&f(Hello(&A)[3][3])) [3][3] {
// do something with A
return A;
}
如果这是相同的数组,您实际上不需要返回。相反,返回void
- 语法会简单得多。
答案 3 :(得分:0)
我会这样做......
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;
}