在我的程序中,我必须滚动很多时间一个二维数组并对其进行一些计算;
在第一种方式中,我将矩阵保存为vector<vector<int>>;
。
我尝试使用连续的内存2d数组
template <typename T>
T** create2DArray(unsigned nrows, unsigned ncols)
{
T** ptr = new T*[nrows]; // allocate pointers
T* pool = new T[nrows*ncols]; // allocate pool
for (unsigned i = 0; i < nrows; ++i, pool += ncols )
ptr[i] = pool;
return ptr;
}
template <typename T>
void delete2DArray(T** arr)
{
delete [] arr[0]; // remove the pool
delete [] arr; // remove the pointers
}
int main()
{
double **dPtr = create2DArray<double>(10,10);
dPtr[0][0] = 10; // for example
delete2DArray(dPtr); // free the memory
}
我看到用矢量矢量存储我的计算速度或多或少比连续两倍快。我不明白为什么。
编辑:我有一个由0,1,2制作的整数矩阵,我必须读取一个文件,其中存储了一个带汽车的矩阵( 1 = BlueCar,2 = RedCar,0 = Empty )。我需要以这种方式编写一个算法来移动矩阵的汽车:
我有两个矢量,其坐标为矩阵的非0格,我通过这些矢量滚动矩阵。 所以我必须花费大量时间来改变它。