所以我尝试使用动态分配来增加数组中的单元格数。
数组来自我创建的包含x和y协调的类型位置
过程就是这样:
我做错了什么?
这是代码:
void ExtendLocArray(location** ilocPrevArray, int inNumberOfMovements)
{
// Variable definition
location* locNewPathArray = new location[inNumberOfMovements];
int nIndex;
// Code section
// Copies the previous locations
for (nIndex = inNumberOfMovements - 2; nIndex >= 0; nIndex--)
{
locNewPathArray[nIndex] = (*ilocPrevArray)[nIndex];
}
delete[](*ilocPrevArray);
(*ilocPrevArray) = locNewPathArray;
}
答案 0 :(得分:0)
正确的函数可以按以下方式查找(假设您要以相反的顺序复制数组的元素)
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 );