1

在 C++ 中,如何将二维数组作为参数传递给函数并且该函数返回一个二维数组?

如果我有一个这样定义的数组:

struct Hello
{
   int a;
   int b;
};

Hello hello[3][3] = {.......};

如何在函数中返回上面的数组?

4

4 回答 4

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]);

我故意将前面两个示例中的返回类型留空,因为它取决于您返回的内容(传递的数组或新创建的数组)和所有权策略。

于 2012-12-05T13:34:51.640 回答
4
Hello(&f(Hello(&In)[3][3])) [3][3] {
    //operations
    return In; 
} 
于 2012-12-05T21:58:27.747 回答
1

难以阅读(推荐使用 typedef),但您可以这样做:

Hello(&f(Hello(&A)[3][3])) [3][3] {
    // do something with A
    return A; 
} 

如果这是同一个数组,您实际上不需要返回。而是返回void- 语法会简单得多。

于 2012-12-05T14:30:33.833 回答
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;
}
于 2012-12-05T13:49:39.813 回答