从 c++ 中的函数对 2d 数组的转换无效
Invalid conversion for 2d array from function in c++
我有一个列大小为 2 且行大小为 x 的 2d 数组。我想根据每行第一列的值进行插入排序。因此,如果给定的数组是 [[2,3],[4,1],[5,6],[1,6]] 我的输出数组将是 [[1,6],[2,3],[4,1],[5,6]]。我已经为此编写了C++函数。但是当我尝试返回数组时出现问题。它说"从 int (*([2] 到 int 的转换无效"。由于我在C++方面不是很有经验,我不知道如何解决这个问题以及为什么这是原因。这是我的函数:
int* Insertion(int arr[][2],int x)
{
for(int i=0;i<x;i++)
{
for(int j=i;j>0;j--)
{
if(arr[j][0]<arr[j-1][0])
{
int temp1=arr [j][0];
int temp2=arr [j][1];
arr [j][0]=arr[j-1][0];
arr[j][1]=arr[j-1][1];
arr[j-1][0]=temp1;
arr[j-1][1]=temp2;
}
}
}
return arr;
}
int* Insertion(int arr[][2],int x)
arr
是指向某个int[2]
的指针。
该int[2]
可能是也可能不是整个int[2]
数组的开始。
实际上,该函数完全等效于:
int* Insertion(int (*arr)[2],int x)
所以arr
的类型是int(*)[2]
.返回类型为 int*
.这两种指针类型不兼容,因为它们指向非常不同的东西,因此出现错误消息。
一个优雅的解决方法是使用 auto
返回类型,以便返回类型与arr
类型相同,而无需再次拼写复杂类型:
auto Insertion(int arr[][2],int x) -> decltype(arr)
一个更优雅的解决方法是摆脱所有这些指针废话,并使用大小为 x*y 的std::vector
来存储数据。搜索堆栈溢出以获取有关如何在C++中创建矩阵数据类型的想法。
using type = int [ 2 ] ;
type * Insertion(int arr[][2],int x) { return arr ; }
arr 的类型是"大小为 2 的 int 数组数组",可以转换为指向大小为 2 的数组的指针。
顺便说一句,如果你想要没有别名的完整声明,有一个语法:
int ( * Insertion( int arr[][ 2 ] , int x ) )[ 2 ] ;
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 将 int 数组转换为带有小数C++的双精度数组
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 将字符数组转换为整数值