push_back - vector insert c++
¿Por qué no se puede usar std:: get() para obtener miembros de un vector? (1)
El índice de std::get
es un parámetro de plantilla que le permite verificar en tiempo de compilación si el índice es válido. Esto solo es posible cuando se conoce el tamaño del contenedor en el momento de la compilación. std::vector
tiene un tamaño variable: puede agregar o eliminar elementos en tiempo de ejecución. Esto significa que std::get
para vectores ofrecería cero beneficios sobre el operator[]
o at
.
Estoy confundido acerca de la función std::get()
. std::get()
se puede usar para acceder a los miembros en array
, pair
y tuple
. Entonces, ¿por qué el Estándar no le permite también acceder a los miembros en vector
?
#include <iostream>
#include <array>
#include <vector>
#include <tuple>
#include <utility> // std::pair
using namespace std;
int main()
{
array<int, 4> a1{3,4,5,67};
pair<int,int> p1{5,6};
tuple<int,float,float> t1{6,5.5,4.5};
cout << std::get<1>(a1) <<endl;
cout << std::get<1>(p1) <<endl;
cout << std::get<1>(t1) <<endl;
}
A continuación se muestra la salida:
4
6
5.5
Pero cuando intento usar std::get()
con vector
, aparece este error de compilación:
#include <iostream>
#include <array>
#include <vector>
#include <tuple>
#include <utility> // std::pair
using namespace std;
int main()
{
vector<int> v1{4,5,6,7,9};
cout << std::get<1>(v1) <<endl;
}
Error de compilación:
main.cpp: In function ''int main()'':
main.cpp:10:27: error: no matching function for call to ''get(std::vector&)''
cout << std::get<1>(v1) <<endl;
^
In file included from main.cpp:2:0:
/usr/include/c++/5/array:280:5: note: candidate: template constexpr _Tp&
std::get(std::array<_Tp, _Nm>&)
get(array<_Tp, _Nm>& __arr) noexcept
^