正確的功能,可以看看下面的方式(前提是你要複製的數組的元素以相反的順序)
void ExtendLocArray(location** ilocPrevArray, size_t inNumberOfMovements)
{
// Variable definition
location* locNewPathArray = new location[inNumberOfMovements];
// Copies the previous locations
for (size_t i = inNumberOfMovements - 1; i != 0; i--)
{
locNewPathArray[i-1] = (*ilocPrevArray)[i-1];
}
delete [] *ilocPrevArray;
*ilocPrevArray = locNewPathArray;
}
你可以聲明像
void ExtendLocArray(location * &ilocPrevArray, size_t inNumberOfMovements);
這就是你可以使用引用指針。
這是一個演示程序,我使用了typedef作爲程序可以編譯的名稱位置。
#include <iostream>
// simplified definition of location
typedef int location;
void ExtendLocArray(location** ilocPrevArray, size_t inNumberOfMovements)
{
// Variable definition
location* locNewPathArray = new location[inNumberOfMovements];
// Copies the previous locations
for (size_t i = inNumberOfMovements - 1; i != 0; i--)
{
locNewPathArray[i-1] = (*ilocPrevArray)[i-1];
}
delete [] *ilocPrevArray;
*ilocPrevArray = locNewPathArray;
}
int main()
{
const size_t N = 10;
location *p = nullptr;
for (size_t i = 0; i < N; i++)
{
ExtendLocArray(&p, i + 1);
p[i] = i;
}
for (size_t i = 0; i < N; i++) std::cout << p[i] << ' ';
std::cout << std::endl;
delete [] p;
return 0;
}
程序輸出是
0 1 2 3 4 5 6 7 8 9
要考慮到的,而不是自己編寫的循環中,您可以使用標準算法std::copy_backward
在頭<algorithm>
聲明。例如,
#include <algorithm>
//...
std::copy_backward(*ilocPrevArray,
*ilocPrevArray + inNumberOfMovements - 1,
locNewPathArray + inNumberOfMovements - 1);
你爲什麼要反向循環?你爲什麼從inNumberOfMovements - 2開始,而不是inNumberOfMovements - 1? –
當提問時,請說明在運行代碼時會發生什麼,以及與預期有什麼不同。像「這個代碼有什麼問題?」並不具有建設性。 –
如果這不會讓你對'std :: vector v;'感到滿意,那麼這只是:'v.resize(inNumberOfMovements);',什麼都不會。 –
WhozCraig