Notas de lectura "C ++ Primer"-Capítulo 06 Matriz multidimensional

Autor: Ma Zhifeng
Enlace: https: //zhuanlan.zhihu.com/p/23579860
Fuente: saber casi con
derechos de autor del autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización. Para reimpresiones no comerciales, indique la fuente.

declaración:

  • El contenido del artículo se recopila y compila de "C ++ Primer Chinese Edition (5th Edition)", y los derechos de autor pertenecen al libro original.
  • El libro original tiene interpretaciones más detalladas y maravillosas, compre libros genuinos para aprender.
  • Este artículo es solo para aprendizaje y comunicación, cualquier forma de reimpresión está prohibida.

Las matrices multidimensionales son en realidad matrices de matrices

int ia[3][4];

Leer de adentro hacia afuera: ia es una matriz con 3 elementos, y cada elemento es una matriz con 4 enteros

inicialización

int ia[3][4] = {
      
       {
      
      0, 1, 2, 3}, {
      
      4, 5, 6, 7}, {
      
      8, 9, 10, 11} };

Básicamente, no hay diferencia entre la inicialización de una matriz unidimensional, ia tiene 3 elementos, por lo que hay 3 llaves dentro de las llaves exteriores, y cada llave se usa para inicializar un elemento de ia.

Como una matriz unidimensional, también puede dar solo una parte del valor inicial

int ix[3][4] = {
      
       {
      
      0}, {
      
      4}, {
      
      8} };  

int ia[3][4] = {
      
       0 3 6 9 };

Subíndice

ia [2] [3] devuelve el tercer elemento del segundo elemento (matriz) de ia

ia [1] devuelve el primer elemento de ia (matriz)

Preste atención a comprender que las matrices multidimensionales son en realidad matrices de matrices.

Rango para

Puede usar bucles for y rango para atravesar matrices multidimensionales

Al usar el alcance de, es mejor declarar las variables de control como tipos de referencia

size_t cnt = 0;  
for( auto &row : ia )  
{
      
        
    for( auto &col : row )  
    {
      
        
        col = cnt;  
        ++cnt;  
    }  
}

Si no se declara como tipo de referencia

for( auto row : ia )  
    for( auto col : row )

La primera línea toma cada elemento de ia, que es un tipo de matriz, que el compilador convertirá en un puntero al primer elemento, y se informará un error en la segunda línea

Por lo tanto, solo el bucle más interno no puede usar tipos de referencia

Por simplicidad, es mejor usar tipos de referencia

Punteros y matrices multidimensionales

Los nombres de las matrices de matrices multidimensionales también se convierten automáticamente en punteros.

int ia[3][4];  
auto p = ia;

Proceso de comprensión:

  1. ia es una matriz con 3 elementos
  2. Cada elemento es una matriz que contiene 4 elementos.
  3. Por lo tanto, su primer elemento también es una matriz que contiene 4 elementos
  4. El puntero al primer elemento es el puntero a la matriz con 4 elementos

Equivalente a

int (*p)[4] = ia;

Recorre cada elemento

for( auto p = ia; p != ia + 3; ++p )  
{
      
        
    for( auto q = *p; q != *p + 4; ++ q )  
    {
      
        
        cout << *q << ' ';   
    }  
    cout << endl;  
}

Desreferencia p para obtener una matriz que contiene 4 elementos, * p es un puntero a su primer elemento

También puede utilizar las funciones de inicio y fin

for( auto p = begin(ia); p != end(ia); ++p )  
{
      
        
    for( auto q = begin(*p); q != end(*p); ++ q )  
    {
      
        
        cout << *q << ' ';   
    }  
    cout << endl;  
}

Use alias de tipo para simplificar la escritura

using int_array = int[4];  
typedef int int_array[4];

No lo olvide, la forma de typedef es similar a la declaración de variable

Supongo que te gusta

Origin blog.csdn.net/qq_26751117/article/details/53156001
Recomendado
Clasificación