返回二维阵列

Returning a 2-dimensional array

本文关键字:二维 阵列 返回      更新时间:2023-10-16

这听起来很容易,我已经看到有关使用矢量来回答的问题,但在我的情况下我不能这样做,所以寻求帮助...

如果我想这样做,我的函数签名应该是什么?请注意,我不能使用向量。它确实必须是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;    
    }    
}

如果要对待返回的指针,就好像它指向了一个简单的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()功能。

您可以将指针返回到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;    
    }    
}

在这里尝试了

一种可能性是int (f)()[2][2]
cdecl
int f()[2][2]

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