向量STL向量与连续存储的速度计算差异

时间:2016-02-06 16:53:04

标签: c++ memory stdvector

在我的程序中,我必须滚动很多时间一个二维数组并对其进行一些计算; 在第一种方式中,我将矩阵保存为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格,我通过这些矢量滚动矩阵。 所以我必须花费大量时间来改变它。

0 个答案:

没有答案