返回二维数组

时间:2019-06-25 05:48:00

标签: c++ arrays

这听起来很简单,我已经看到过使用向量代替答案的问题,但是我无法做到这一点,所以寻求帮助...

如果我想这样做,return2dArray()的函数签名应该是什么?请注意,我不能使用向量。确实必须是int [] []。 谢谢!

int* return2dArray()
{
    static int a[2][2] = {{1, 2}, {4, 5}};
    return a;
}

int main()
{
    auto x = return2dArray();

    for (int y = 0; y < 3 ; y++)
    {
        std::cout << "y is = " << x[y] <<std::endl;    
    }    
}

3 个答案:

答案 0 :(得分:3)

如果要将返回的指针当作指向简单的1D数组的方式来对待,我建议只使用一个1D数组。

// int* return2dArray()
int* return1dArray()
{
    static int a[4] = {1, 2, 4, 5};
    return a;
}

对此的一种改进是使用std::array

#include <iostream>
#include <array>

std::array<int, 4>& return1DArray()
{
   static std::array<int, 4> a = {1, 2, 4, 5};
   return a;
}

int main()
{
    auto x = return1dArray();

    for (size_t i = 0; i < x.size() ; i++)
    {
       std::cout << "x[" << i << "] is = " << x[i] << std::endl;    
    }

    // Iterate using the range-for loop.
    for ( auto e : x )
    {
       std::cout << "e is = " << e << std::endl;    
    }
}

std::array比内置数组更可取,因为您获得了size()成员函数而不会增加运行时间。如果要遍历数组的对象,也可以使用begin()end()函数。

答案 1 :(得分:2)

一种可能性是int (f)()[2][2]
cdecl
或简单地int f()[2][2]

如果要省略一个或两个维度,则应返回具有或更佳尺寸spanpackvector的指针。

答案 2 :(得分:2)

您可以将指针返回2d数组的开头,因为内存中的元素彼此相邻。

int* return2dArray()
{
    static int a[2][2] = {{1, 2}, {4, 5}};
    return &a[0][0];
}

int main()
{
    auto x = return2dArray();

    for (int y = 0; y < 4 ; y++)
    {
        cout << "y is = " << x[y] << endl;    
    }    
}

尝试here