Cómo entender el “or” o “||” en C++.
Tengo un vector 2d como se muestra a continuación.
Lo que quiero hacer es comprobar si el elemento está en el borde izquierdo o si su elemento izquierdo es 1.
Entonces, lo que intenté hacer es:
Lo que intenté hacer es:
para (int r = 0; r < 5; ++r){
para (int c = 0; c <4; ++c){
if (r – 1 < 0 || mat[r-1][c] == 1)
}
}
Mi pregunta es ¿cómo se ejecuta esta línea?
if (r – 1 < 0 || mat[r-1][c] == 1)
¿Calcula r-1
y mat[r-1][c] == 1
por separado y luego realiza la operación or
?
En este caso, ¿puede haber acceso ilegal a la memoria cuando r == 0?
Parece que mi código funciona bien, pero esto no tiene sentido para mí.
¿Podría alguien ayudarme con esto?
davy.ai
Sí, la línea
if (r - 1 < 0 || mat[r-1][c] == 1)
calcular-1
ymat[r-1][c] == 1
por separado y luego realiza la operación lógica OR en ellos.Cuando
r
es igual a 0,r-1
será -1 y esto dará lugar a un acceso ilegal a la memoria porque los índices de vector comienzan en 0 hasta el tamaño del vector menos uno. Para evitar esto, se podría agregar una comprobación adicional para el caso cuandor
es igual a 0:“`c ++
if ((r-1 < 0 || mat[r-1][c] == 1) y c! = 0) {
// El elemento está en el borde izquierdo o su vecino izquierdo es 1
}
en este código,
auto & fila
itera sobre cada fila demat
directamente, en lugar de usar índices. la condición verifica si el elemento actual está en el borde izquierdo (c == 0
) o si su vecino izquierdo es 1 (fila[c-1] == 1
), así como si está en el borde derecho (c! = fila.size () -1
) o si su vecino derecho es 1 (fila [c + 1] == 1
). c)=”” {=”” si=”” ((c=”=” 0=”” ||=”” fila[c=”” -=”” 1]=”=” 1)=”” &&=”” (c!=”fila.size” ()=”” -1=”” ||=”” fila=”” [c=”” +=”” 1]=”=” 1))=”” {=”” //=”” el=”” elemento=”” está=”” en=”” el=”” borde=”” izquierdo=”” o=”” su=”” vecino=”” izquierdo=”” es=”” 1=”” }=”” }=”” }=””="" en="" este="" código,="" `auto="" &="" fila`="" itera="" sobre="" cada="" fila="" de="" `mat`="" directamente,="" en="" lugar="" de="" usar="" índices.="" la="" condición="" verifica="" si="" el="" elemento="" actual="" está="" en="" el="" borde="" izquierdo="" (`c="=" 0`)="" o="" si="" su="" vecino="" izquierdo="" es="" 1="" (`fila[c-1]="=" 1`),="" así="" como="" si="" está="" en="" el="" borde="" derecho="" (`="" c!="fila.size" ()="" -1`)="" o="" si="" su="" vecino="" derecho="" es="" 1="" (`fila="" [c="" +="" 1]="="></fila.size();++ c) {
si ((c == 0 || fila[c - 1] == 1) && (c! = fila.size () -1 || fila [c + 1] == 1)) {
// el elemento está en el borde izquierdo o su vecino izquierdo es 1
}
}
}
en este código,
auto & fila
itera sobre cada fila demat
directamente, en lugar de usar índices. la condición verifica si el elemento actual está en el borde izquierdo (c == 0
) o si su vecino izquierdo es 1 (fila[c-1] == 1
), así como si está en el borde derecho (c! = fila.size () -1
) o si su vecino derecho es 1 (fila [c + 1] == 1
).>