我有一个std::vector< vector<int> > grid (rows, std::vector<double>(columns));
形式的网格,它是一个类的成员变量。网格存储了集合{0,1,2,...,9}中的值。想象一下,如果我通过网格并且在grid[row][col] != 0
我需要知道左边和右边有多少个零的位置再次grid[newRow][newCol] != 0
完成(左边/右边意味着这个)行,所以必须遍历列索引)。目前我使用以下两个函数来完成它:
int countLeft(unsigned int rowIndex, unsigned int colIndex) {
int left = 0;
for (signed int i = colIndex-1; i >= 0; i--) {
if (this->grid[rowIndex][colIndex] != 0 && this->grid[rowIndex][i] == 0){
left++;
}
else
break;
}
return left;
}
int countRight(unsigned int rowIndex, unsigned int colIndex){
int right = 0;
for (unsigned int i = colIndex + 1; i < this->grid[0].size(); i++) {
if (this->grid[rowIndex][i] == 0 && this->grid[rowIndex][colIndex] != 0) {
right++;
}
else
break;
}
return right;
}
在VS2013上运行Performance向导我发现这两个函数显着减慢了我的程序。因此,我的问题是,我如何能够改进我左/右知道零的方法,而不是每次都计算。提前谢谢。
答案 0 :(得分:0)
一种简单的方法是将结果存储在局部,并在向量发生变化时计算它。向量的设定器将是计算的好地方。但是,当向量在每次函数调用之前都没有更新时,这只会有所帮助。