2つの3D配列の要素を追加し、その結果を3番目の3D配列に格納し、結果を1次元ベクトルにコピーして返します一定の基準によって。私が抱えている問題は、ローカル変数を返すことができないため、動的メモリ割り当てを使ってベクトルを返す方法です。これは、ローカル変数を返すことができれば、コードは次のようになります。ここではC++でのベクトルの動的メモリ割り当て
template <class T>
const vector<T>& allOperations(T*** const &x, T*** const &y, T*** &z, int height, int width, int depth)
{
vector<T> results(height*width*depth);
// Add the values of array x and y
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
for (int k = 0; k < depth; k++)
{
z[i][j][k] = x[i][j][k] + y[i][j][k];
}
}
}
int l = 0;
//Places the values of array z into a vector
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
for (int k = 0; k < depth; k++)
{
results[l] = z[i][j][k];
l++;
}
}
}
return results;
}
は、動的なメモリ割り当てを使用しての私の間違った試みです:
template <class T>
const vector<T>& allOperations(T*** const &x, T*** const &y, T*** &z, int height, int width, int depth)
{
vector<T>* results(height*width*depth) = new vector<T>;
// Add the values of array x and y
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
for (int k = 0; k < depth; k++)
{
z[i][j][k] = x[i][j][k] + y[i][j][k];
}
}
}
int l = 0;
//Places the values of array z into a vector
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
for (int k = 0; k < depth; k++)
{
*results[l] = z[i][j][k];
l++;
}
}
}
return *results;
}
あなたは、単にメモリのオーバーヘッドなし 'ベクトル'を返すことができますので、すべてのSTLコンテナのコンテンツは、自動的に、ヒープ上に格納されています。 'const' shoulsも動作します。まだそれを試していない。私はあなたには、2つの理由からSTLコンテナを動的メモリ割り当てと組み合わせて使用すべきではないと言われました。まず、コードは信じられないほど乱雑になります。多次元配列の場合2番目:スタック上にあるコンテナがローカル関数スタックに参照を格納するだけなので、ちょっとした作業です。それ以外のものはすべてヒープ上に作成されます。 –
guitarflow
これは万一の宿題ですか?そうであれば、新しく作成されたベクトルが定数参照によって返されるという奇妙な要件が説明されます。 –