如何在函数中传递二维数组作为参数并在c ++中返回二维数组?

时间:2012-12-05 13:32:45

标签: c++ arrays pointers

在C ++中,如何在函数中传递二维数组作为参数,这个函数返回一个二维数组?

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

struct Hello
{
   int a;
   int b;
};

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

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

4 个答案:

答案 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;
}