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 :
- 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++.
- 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;
}
- 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
- 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;
}
- 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) .
- 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
- 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.
- 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
- 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