Ventajas del vector sobre la array en C++

Ya hemos hablado de arrays y vectores . En esta publicación, discutiremos las ventajas del vector sobre la array normal.

Ventajas de Vector sobre arreglos :

  1. Vector es una clase de plantilla y es solo una construcción de C++ , mientras que las arrays son una construcción de lenguaje integrada y están presentes tanto en C como en C++.
  2. Los vectores se implementan como arrays dinámicas con una interfaz de lista, mientras que las arrays se pueden implementar de forma estática o dinámica con una interfaz de tipo de datos primitivos .

    #include <bits/stdc++.h>
    using namespace std;
      
    int main()
    {
        int array[100]; // Static Implementation
        int* arr = new int[100]; // Dynamic Implementation
        vector<int> v; // Vector's Implementation
        return 0;
    }
  3. El tamaño de las arrays es fijo , mientras que los vectores son redimensionables , es decir, pueden crecer y reducirse a medida que los vectores se asignan en la memoria del montón.

    #include <bits/stdc++.h>
    using namespace std;
      
    int main()
    {
        int array[100]; // Static Implementation
      
        cout << "Size of Array " << sizeof(array) / sizeof(array[0]) << "\n";
      
        vector<int> v; // Vector's Implementation
      
        // Inserting Values in Vector
        v.push_back(1);
        v.push_back(2);
        v.push_back(3);
        v.push_back(4);
        v.push_back(5);
      
        cout << "Size of vector Before Removal=" << v.size() << "\n";
      
        // Output Values of vector
        for (auto it : v)
            cout << it << " ";
      
        v.erase(v.begin() + 2); // Remove 3rd element
      
        cout << "\nSize of vector After removal=" << v.size() << "\n";
      
        // Output Values of vector
        for (auto it : v)
            cout << it << " ";
      
        return 0;
    }

    Salida :

    Size of Array 100
    Size of vector Before Removal=5
    1 2 3 4 5 
    Size of vector After removal=4
    1 2 4 5
    
  4. Las arrays deben desasignarse explícitamente si se definen dinámicamente, mientras que los vectores se desasignan automáticamente de la memoria del montón.

    #include <bits/stdc++.h>
    using namespace std;
      
    int main()
    {
        int* arr = new int[100]; // Dynamic Implementation
        delete[] arr; // array Explicitly deallocated
      
        vector<int> v; // Automatic deallocation when variable goes out of scope
        return 0;
    }
  5. El tamaño de la array no se puede determinar si se asigna dinámicamente , mientras que el tamaño del vector se puede determinar en tiempo O (1) .
  6. Cuando las arrays se pasan a una función, también se pasa un parámetro separado para el tamaño, mientras que en el caso de pasar un vector a una función, no existe la necesidad, ya que el vector mantiene variables que realizan un seguimiento del tamaño del contenedor en todo momento .

    #include <bits/stdc++.h>
    using namespace std;
      
    int main()
    {
        int* arr = new int[100]; // Dynamic Implementation
      
        cout << "Size of array= ";
        cout << sizeof(arr) / sizeof(*arr) << "\n"; // Pointer cannot be used to get size of
        // block pointed by it
        return 0;
    }

    Salida :

    Size of array= 2
    
  7. Cuando la array se llena y se insertan nuevos elementos; ninguna reasignación se realiza implícitamente, mientras que cuando el vector se vuelve más grande que su capacidad, la reasignación se realiza implícitamente.
  8. Las arrays no se pueden devolver a menos que se asignen dinámicamente desde una función, mientras que los vectores se pueden devolver desde una función .

    // Program to demonstrate arrays cannot be returned
    #include <bits/stdc++.h>
    using namespace std;
      
    int* getValues()
    {
      
        int arr[10]; // Array defined locally
        for (int i = 0; i < 10; i++) // Putting Values in array
            arr[i] = i + 1;
      
        return arr; // returning pointer to array
    }
      
    // main function
    int main()
    {
      
        int* array; // pointer of int type
      
        array = getValues(); // Call function to get arr
      
        for (int i = 0; i < 10; i++) { // Printing Values
            cout << "*(array + " << i << ") : ";
            cout << *(array + i) << endl;
        }
      
        return 0;
    }

    Salida :

    warning: address of local variable 'arr' returned [-Wreturn-local-addr]
    Segmentation Fault (SIGSEGV)
    

    // Program to demonstrate vector can be returned
    #include <bits/stdc++.h>
    using namespace std;
      
    // Function returning vector
    vector<int> getValues()
    {
      
        vector<int> v; // Vector defined locally
        for (int i = 0; i < 10; i++) // Inserting values in Vector
            v.push_back(i + 1);
      
        return v; // returning pointer to array
    }
      
    // main function
    int main()
    {
      
        vector<int> get;
      
        get = getValues(); // Call function to get v
      
        // Output Values of vector
        for (auto it : get)
            cout << it << " ";
      
        return 0;
    }

    Salida :

    1 2 3 4 5 6 7 8 9 10 
    
  9. Las arrays no se pueden copiar ni asignar directamente, mientras que los vectores se pueden copiar o asignar directamente.

    #include <bits/stdc++.h>
    using namespace std;
      
    // main function
    int main()
    {
        vector<int> v; // Vector defined locally
        for (int i = 0; i < 10; i++)
            v.push_back(i + 1);
      
        vector<int> get;
      
        get = v; // Copying vector v into vector get
      
        cout << "vector get:\n";
        for (auto it : get)
            cout << it << " ";
      
        int arr[10];
        for (int i = 0; i < 10; i++) // Putting Values in array
            arr[i] = i + 1;
      
        int copyArr[10];
      
        copyArr = arr; // Error
      
        return 0;
    }

    Salida :

    vector get:
    1 2 3 4 5 6 7 8 9 10
    
    error: invalid array assignment
        copyArr=arr;
    

Publicación traducida automáticamente

Artículo escrito por Abhishek rajput 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 *