Я бы немного изменил логику вашего цикла
void some_operation_on_matrix(Matrix& m, size_t some_r, size_t some_c)
{
for (size_t c = 0; c < m.cols(); c++) {
if (c == some_c) {
for (size_t r = 0; r < m.rows(); r++) {
if (r == some_r) {
// m(r,c) = some expression A
}
else {
// m(r,c) = some expression B
}
}
else {
for (size_t r = 0; r < m.rows(); r++) {
if (r == some_r) {
// m(r,c) = some expression C
}
else {
// m(r,c) = some expression D
}
}
}
}
}
Таким образом, оператор if if (c == some_c)
должен оцениваться только для всех m.cols
, а не для всех m.cols * m.rows
.
Вы можете извлечь второй цикл for в функции
void innerLoop(Matrix &m, const size_t some_r, std::function expression1, std::function expression2)
{
for (size_t r = 0; r < m.rows(); r++) {
if (r == some_r) {
m(r,c) = expression1(...);
}
else {
m(r,c) = expression2(...);
}
}
}
и
void some_operation_on_matrix(Matrix& m, size_t some_r, size_t some_c)
{
for (size_t c = 0; c < m.cols(); c++) {
if (c == some_c) {
innerLoop(m, some_r, expressionA, expressionB);
else {
innerLoop(m, some_r, expressionC, expressionC);
}
}
}