Manipulación de tipo de array en C++

Este artículo demuestra algunas de las funciones integradas que se pueden usar para consultar y manipular tipos de arrays, incluso una array multidimensional. Estas funciones pueden ser útiles en los casos en que necesitamos información o manipulamos una array que iniciamos con diferentes dimensiones. Estas funciones se definen en el archivo de encabezado. Algunas de las funciones incluyen:

  1. is_array() : como sugiere el nombre, el único propósito de esta función es verificar si una variable es un tipo de array o no. Notable aquí es que incluso un std::array no se considera un arreglo de acuerdo con esta función. La constante miembro «valor» devuelve verdadero si el tipo es una array; de lo contrario, devuelve falso.
  2. is_same() : esta función es para verificar las relaciones de tipo y devuelve verdadero si dos tipos tienen exactamente las mismas características. La constante miembro «valor» devuelve verdadero si los tipos son iguales, de lo contrario devuelve falso.

    // C++ code to demonstrate the working of 
    // is_array() and is_same()
      
    #include<type_traits>
    #include<iostream>
    #include<array>
    #include<string>
    using namespace std;
      
    int main()
    {
        // checking which is array using is_array
        cout << "Is Integer an array? : " << is_array<int>::value << endl;
          
        cout << "Is Array an array? : " << is_array<int[10]>::value << endl;
          
        cout << "Is 2D Array an array? : " 
        << is_array<int[10][10]>::value << endl;
          
        cout << "Is String an array? : " << is_array<string>::value << endl;
          
        cout << "Is Character Array an array? : " 
        << is_array<char[10]>::value << endl;
          
        cout << "Is Array class type an array? : " 
        << is_array<array<int,3>>::value << endl;
          
        cout << endl;
          
        // checking for same types using is_same()
        cout << "Is 2D array same as 1D array? : " << 
        is_same<int[10],int[10][10]>::value << endl;
          
        cout << "Is Character array same as Integer array? : " 
        << is_same<int[10],char[10]>::value << endl;
          
        cout << "Is 1D array same as 1D array (Different sizes) ? : " 
        << is_same<int[10],int[20]>::value << endl;
          
        cout << "Is 1D array same as 1D array? (Same sizes): " 
        << is_same<int[10],int[10]>::value << endl;
        return 0;
    }

    Producción:

    Is Integer an array? : 0
    Is Array an array? : 1
    Is 2D Array an array? : 1
    Is String an array? : 0
    Is Character Array an array? : 1
    Is Array class type an array? : 0
    
    Is 2D array same as 1D array? : 0
    Is Character array same as Integer array? : 0
    Is 1D array same as 1D array (Different sizes) ? : 0
    Is 1D array same as 1D array? (Same sizes): 1
    
  3. rank() : esta es una función de consulta de propiedades que devuelve el rango de la array. Rango significa la dimensión de la array . La constante miembro de valor devuelve el rango del objeto.

    // C++ code to demonstrate the working of 
    // rank()
      
    #include<type_traits> // for array query functions
    #include<iostream>
    using namespace std;
      
    int main()
    {
        // checking rank of different types
        cout << "The rank of integer is : " << rank<int>::value << endl;
          
        cout << "The rank of 1D integer array is : " 
        << rank<int[10]>::value << endl;
          
        cout << "The rank of 2D integer array is : " 
        << rank<int[20][10]>::value << endl;
          
        cout << "The rank of 3D integer array is : " 
        << rank<int[20][10][40]>::value << endl;
          
        cout << "The rank of 1D character array is : " 
        << rank<char[10]>::value << endl;
      
        cout << endl;
          
    }

    Producción:

    The rank of integer is : 0
    The rank of 1D integer array is : 1
    The rank of 2D integer array is : 2
    The rank of 3D integer array is : 3
    The rank of 1D character array is : 1
    
  4. extension() : tanto la extensión como la eliminación de la extensión son alteraciones de tipo compuesto que se pueden aplicar a arrays en C++. Esta función devuelve el tamaño de la dimensión particular de la array. Esta función toma dos argumentos, el tipo de array y la dimensión en cuyo tamaño se debe encontrar. Esto también tiene el valor constante del miembro para el valor de impresión.
  5. remove_extent() : esta función elimina la primera dimensión desde la izquierda en la array/arreglo declarado.
  6. remove_all_extents() : esta función elimina todas las dimensiones de la array/array y las convierte en un tipo de datos base.

    // C++ code to demonstrate the working of 
    // extent(), remove_extent(), remove_all_extents()
      
    #include<type_traits> // for array query functions
    #include<iostream>
    using namespace std;
      
    int main()
    {
      
          
        // Checking extent of different types (using extent)
        cout << "The extent of 1st dimension of 3D integer array is : " ;
        cout << extent<int[20][10][40],0>::value << endl;
          
        cout << "The extent of 2nd dimension of 3D integer array is : " ;
        cout << extent<int[20][10][40],1>::value << endl;
          
        cout << "The extent of 3rd dimension of 3D integer array is : " ;
        cout << extent<int[20][10][40],2>::value << endl;
          
        cout << "The extent of 4th dimension of 3D integer array is : " ;
        cout << extent<int[20][10][40],3>::value << endl;
          
        cout << endl;
          
        // Removing extent of types
        cout << "The rank after removing 1 extent is : " ;
        cout << rank<remove_extent<int[20][10][30]>::type>::value << endl;
          
        // 1st dimension from left is deleted
        cout << "The extent of 1st after removing 1 extent is : " ;
        cout << extent<remove_extent<int[20][10][30]>::type>::value << endl;
          
        cout << endl;
          
        // Removing all extents of types
        cout << "The rank after removing all extents is : " ;
        cout << rank<remove_all_extents<int[20][10][30]>::type>::value << endl;
          
        // All extents are deleted
        cout << "The extent of 1st after removing all extents is : " ;
        cout << extent<remove_all_extents<int[20][10][30]>::type>::value << endl;
      
        cout << endl;
          
    }

    Producción:

    The extent of 1st dimension of 3D integer array is  : 20
    The extent of 2nd dimension of 3D integer array is  : 10
    The extent of 3rd dimension of 3D integer array is  : 40
    The extent of 4th dimension of 3D integer array is  : 0
    
    The rank after removing 1 extent is : 2
    The extent of 1st after removing 1 extent is : 10
    
    The rank after removing all extents is : 0
    The extent of 1st after removing all extents is : 0
    

Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo electrónico a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *