Quiero comenzar diciendo que soy realmente nuevo en C++ y aún no he podido encontrar una respuesta a esta pregunta. Es para un proyecto del colegio y mi profesor no ha sido de mucha ayuda.
Quería saber cómo usar una declaración de cambio con una matriz multidimensional. Por ejemplo, digamos que tenemos esta matriz:
int arr[3][5] = {{1, 3, 1, 1, 2}, {1, 2, 4, 5, 6}, {6, 3, 4, 3, 5}};¿Cómo usaría una declaración de cambio para ubicar las filas individuales y verificar ciertos criterios dentro de ellas?
Editar: Creo que es mejor si aclaro un poco. Quiero verificar las condiciones de los elementos en cada fila, no solo los elementos individuales en sí.
Así que puedo comprobar si hay 1 en el primer subarreglo, comprobar si hay 3 en el segundo subarreglo y comprobar si hay 4 en el último subarreglo.
Respuesta corta; no lo harías swtich no es la herramienta adecuada para el trabajo. Estás buscando algunos criterios, ¿verdad? En ausencia de un criterio específico, digamos que está interesado en si la matriz secundaria contiene un 1 .
Podemos formular esto con una función:
bool contains_a_1(int arr[5]) { return std::any_of( // This is an algorithm that will check if any of them // match the predicate below std::begin(arr), std::end(arr), // This is the range to check over [](int v) { return v == 1; } // This is a simple lambda function that tells the // algorithm what we are looking for. ); Ahora tenemos una función que comprueba nuestra condición. Así que ahora tenemos que comprobarlo, pero ¿cómo? Si queremos comprobar si alguna de las matrices de nuestra matriz cumple esta condición, ya hemos visto algo que nos puede ayudar con esto, std::any_of :
int arr[3][5] = {{1, 3, 1, 1, 2}, {1, 2, 4, 5, 6}, {6, 3, 4, 3, 5}}; bool there_is_a_one_somewhere = std::any_of(std::begin(arr), std::end(arr), contains_a_1);O tal vez desee este bool para cada valor en la matriz:
std::array<bool, 3> contains_1; std::transform(std::begin(arr), std::end(arr), std::begin(contains_1), contains_a_1);¿O tal vez quieres hacer otra cosa? Bueno, ¡ probablemente haya un algoritmo para eso! Solo necesita encontrar el correcto aquí en <algoritmo>.
Así que puedo comprobar si hay 1 en el primer subarreglo, comprobar si hay 3 en el segundo subarreglo y comprobar si hay 4 en el último subarreglo.
Puede usar bucles for para iterar sobre las filas y std::find para verificar si el subarreglo contiene un elemento en particular o no, como se muestra a continuación:
#include <iostream> #include <algorithm> int main() { int arr[3][5] = {{1, 3, 1, 1, 2}, {1, 2, 4, 5, 6}, {6, 3, 4, 3, 5}}; //iterate over rows for(auto &row: arr) { bool exists = std::find(std::begin(row), std::end(row), 1) != std::end(row); //check if 1 is present in the current row std::cout<<"element "<<(exists?"is present":"not present")<<std::endl; } } En el código anterior, hemos verificado si 1 está presente en el subarreglo o no. Del mismo modo, puede verificar otros valores como 3 o 4 .