C++ std::数组到指针访问冲突错误
我试图让我的转置函数接受指针,而不是C++ std::数组到指针访问冲突错误,c++,c++11,C++,C++11,我试图让我的转置函数接受指针,而不是std::array。我之所以要这样做是因为我可以通过.data()函数传递一个指针或std::array 目前我有以下内容,它使用2D和1D阵列进行就地转换或转换到新阵列。。但是,将下面的代码转换为获取指针会导致内存访问冲突错误 有人能解释一下区别,以及为什么下面的不等于我的指针版本(如下所示): #包括 #包括 模板 无效转置(标准::数组和数据) { 内部宽度=sqrt(尺寸); 对于(int I=1;I
std::array
。我之所以要这样做是因为我可以通过.data()
函数传递一个指针或std::array
目前我有以下内容,它使用2D和1D阵列进行就地转换或转换到新阵列。。但是,将下面的代码转换为获取指针会导致内存访问冲突错误
有人能解释一下区别,以及为什么下面的不等于我的指针版本(如下所示):
#包括
#包括
模板
无效转置(标准::数组和数据)
{
内部宽度=sqrt(尺寸);
对于(int I=1;I
但是,当我使用指针时,转换为以下内容不起作用:S
template<typename T>
void Transpose(T* Data, std::size_t Size)
{
int Width = sqrt(Size);
for (int I = 1; I < Width; ++I)
{
for (int J = 0; J < I; ++J)
{
std::swap(Data[I * Width + J], Data[J * Width + I]);
}
}
}
template<typename T>
void Transpose(T** Data, std::size_t Size)
{
for (int I = 0; I < Size; ++I)
{
for (int J = 0; J < I; ++J)
{
std::swap(Data[I][J], Data[J][I]);
}
}
}
模板
无效转置(T*数据,std::size\u T size)
{
内部宽度=sqrt(尺寸);
对于(int I=1;I
有谁能解释一下这种差异,以及为什么
T**
one不能工作?二维数组不会退化为双指针。它衰变为T*[]
。有关说明,请参阅
您必须将故障线路更改为:
void Transpose(T* Data[], std::size_t Size)
或者(因此可以推断长度)
模板
无效转置(T(&Data)[Size1][Size2])
二维数组不会退化为双指针。它衰变为T*[]
。有关说明,请参阅
您必须将故障线路更改为:
void Transpose(T* Data[], std::size_t Size)
或者(因此可以推断长度)
模板
无效转置(T(&Data)[Size1][Size2])
除了双指针之外,它在什么方面不相等?您是否得到不同的输出、错误?在哪些方面不相等(除了双指针)?您是否得到不同的输出、错误?
template <typename T, std::size_t Size1, std::size_t Size2>
void Transpose(T (&Data)[Size1][Size2])