我需要編寫一個函數,添加兩個3D數組的元素,將結果存儲在第三個3D數組中,將結果存儲並複製到一維向量中,然後返回此向量通過不斷的參考。我遇到的問題是如何使用動態內存分配來返回矢量,因爲您無法返回局部變量。這是代碼的樣子,如果你能返回一個局部變量:動態內存分配在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'也會起作用。但還沒有嘗試過。有人告訴我,由於兩個原因,不應該將STL容器與動態內存分配結合使用。首先:代碼變得難以置信,尤其是。對於多維數組。第二:這是雙重工作,因爲位於堆棧上的容器只是將引用存儲在本地函數堆棧中,而其他所有內容都是在堆上爲您創建的。 –
guitarflow
2012-02-12 20:59:08
這是否是功課?如果是這樣,它將解釋奇怪的要求,即通過不斷引用返回新創建的向量。 – 2012-02-12 22:29:57