vectors push_back example español c++ c++11 stdvector

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 ^