使用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掉,便于调试。
缺点是性能可能会略有下降。总是需要有些取舍的。
浙公网安备 33010602011771号