正确的功能,可以看看下面的方式(前提是你要复制的数组的元素以相反的顺序)
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