繁体   English   中英

如何检查向量中向量的位置是否超出范围?

[英]How do I check if a position in my vector of vectors is out of bounds?

我有一个向量填充了文本文件中字符的向量。 它本质上是一个简单的爆发模拟器,感染了'i'字符,并且容易感染's'字符。 关键是要遍历矩阵,如果遇到“ i”,它将把它周围的所有“ s”都变成“ i”。 由于检查矩阵边缘范围之外的位置,因此在检查周围的元素时遇到问题。 有没有办法检查我的if语句中的界限?

这是代码:

for (int i = 0; i < population.size(); i++) {  
        for(int j = 0; j < population[i].size(); j++) {

            if(population[i][j] == 'i') {

                if(population[i-1][j] == 's') { 
                    population[i-1][j] = 'i';
                }
                if(population[i-1][j+1] == 's') {
                    population[i-1][j+1] = 'i';
                }
                if(population[i][j+1] == 's') {
                    population[i][j+1] = 'i';
                }
                if(population[i+1][j+1] == 's') {
                    population[i+1][j+1] = 'i'; 
                }
                if(population[i+1][j] == 's') {
                    population[i+1][j] = 'i';
                }
                if(population[i+1][j-1] == 's') {
                    population[i+1][j-1] = 'i';
                }
                if(population[i][j-1] == 's') {
                    population[i][j-1] = 'i';
                }
            }
        }
    }

可以直接执行以下操作,而不是直接引用特定的数组条目:

void checkForInfectionAndInfectIfNeeded(int i, int j) {
    for (int row = -1; row <= 1; row++) {
        for (int column = -1; column <=1; column++) {
            infect(i + row, j + column);
        }
    }
}

void infect(int i, int j) {
    if (i < 0 || i >= population.size() || j < 0 || j >= population[j].size()) {
       return;
    } else {
       population[i][j] = 'i';
    }
}

这样, infect方法是检查边界的唯一方法,并且用两个循环代替了一长串手动检查周围位置的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM