Вместо прямой ссылки на конкретную запись массива, вы можете сделать что-то вроде следующего:
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
является единственным, который проверяет границы, и вы заменяете свой длинный список проверки окрестностей вручную двумя циклами.