Transpose 関数が の代わりにポインターを取るようにしようとしていますstd::arrays
。そして、私がこれをしたい理由は、ポインターまたは関数std::array
を介して渡すことができるから.data()
です。
現在、私は次のものを持っており、2D 配列と 1D 配列の両方を使用して、その場で転置するか、新しい配列に転置することができます。
誰かが違いと、以下が私のポインターバージョンと等しくない理由を説明できますか (この下):
#include <iostream>
#include <array>
template<typename T, std::size_t Size>
void Transpose(std::array<T, Size> &Data)
{
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, std::size_t Size>
void Transpose(std::array<std::array<T, Size>, Size> &Data)
{
for (int I = 0; I < Size; ++I)
{
for (int J = 0; J < I; ++J)
{
std::swap(Data[I][J], Data[J][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**
が機能しないのですか?