代码改变世界

使用vector建立动态二维数组

2011-05-02 13:31  南乡的木匠  阅读(614)  评论(0)    收藏  举报

在用动态规划的方法解决问题时,经常需要使用动态大小的二维数组。

我原来是使用一维数组模仿二维数组,例如定一个ROW行COLUMN列的数组:

int *arr = (int *) malloc(ROW * COLUMN * sizeof(int));
或者
int *arr = new int[ROW * COLUMN];

要访问第i行第j列就用arr[i * COLUMN + j]。

虽然可以将就着用,但写的时候总不及arr[i][j]简介明了,使用完还要释放掉arr。并且在出错的时候,例如越界访问,并没有明显地提示。

当代码中到处充斥这诸如i * COLUMN + j之类到句子,并且时不时地越界访问地时候,我觉得该找一个更优雅一点到做法,于是选择了C++标准库的vector。

vector<vector<init> > arr;
vector<int> ivec(COLUMN); //还可以顺带初始化成任意值
for(int i = 0; i != ROW; ++i)     arr.push_back(ivec);

这样就可以使用arr[i][j]的形式访问数组了,可读性更好。

附加的好处还有便于初始化;不必显式释放arr;越界访问时直接被kill掉,便于调试。

缺点是性能可能会略有下降。总是需要有些取舍的。