返回二维阵列
Returning a 2-dimensional array
这听起来很容易,我已经看到有关使用矢量来回答的问题,但在我的情况下我不能这样做,所以寻求帮助...
如果我想这样做,我的函数签名应该是什么?请注意,我不能使用向量。它确实必须是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]
如果要省略一个或两个维度,则应返回具有尺寸或更好spanpack
或vector
的指针。
相关文章:
- 二维阵列的动态分配
- C2440 使用Shared_ptr创建二维阵列
- 围绕二维阵列做一个圆圈
- 为什么一个二维阵列会导致赛段故障,而另一个则不会导致?
- 二维阵列的名称到底代表什么?
- 返回二维阵列
- 是二维阵列访问/修改时间组
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- 八个皇后二维阵列,带有gotos errror
- C++中的二维阵列
- 使用矢量创建二维阵列
- 编制二维阵列
- 错误:解除分配二维阵列
- 复制二维阵列C++
- 将二维阵列模拟为一维阵列
- 从具有两列的文件中加载二维阵列
- 可调整大小的动态二维阵列的更好解决方案
- 使用二维阵列用C++求解埃拉托色尼筛
- 如何显示非对角线二维阵列元素
- 嵌套阵列或嵌套二维阵列