数"空的空间"有效地在2D矢量中右/左

时间:2015-02-28 15:27:41

标签: c++ c++11 vector

我有一个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向导我发现这两个函数显着减慢了我的程序。因此,我的问题是,我如何能够改进我左/右知道零的方法,而不是每次都计算。提前谢谢。

1 个答案:

答案 0 :(得分:0)

一种简单的方法是将结果存储在局部,并在向量发生变化时计算它。向量的设定器将是计算的好地方。但是,当向量在每次函数调用之前都没有更新时,这只会有所帮助。