programacion - Cómo inicializar un vector en C++
vectores en c (2)
Con el nuevo estándar de C ++ (puede necesitar que se habiliten indicadores especiales en su compilador) simplemente puede:
std::vector<int> v { 34,23 };
// or
// std::vector<int> v = { 34,23 };
O incluso:
std::vector<int> v(2);
v = { 34,23 };
En los compiladores que no son compatibles con esta característica (listas de inicializador) aún puede emular esto con una matriz:
int vv[2] = { 12,43 };
std::vector<int> v(&vv[0], &vv[0]+2);
O, en el caso de la asignación a un vector existente:
int vv[2] = { 12,43 };
v.assign(&vv[0], &vv[0]+2);
Como sugirió James Kanze, es más robusto tener funciones que te den el comienzo y el final de una matriz:
template <typename T, size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }
template <typename T, size_t N>
T* end(T(&arr)[N]) { return &arr[0]+N; }
Y luego puedes hacer esto sin tener que repetir el tamaño en todas partes:
int vv[] = { 12,43 };
std::vector<int> v(begin(vv), end(vv));
Posible duplicado:
C ++: la forma más fácil de inicializar un vector STL con elementos codificados
Quiero inicializar un vector como lo hacemos en el caso de una matriz.
Ejemplo
int vv[2] = {12, 43};
Pero cuando lo hago así,
vector<int> v(2) = {34, 23};
O
vector<int> v(2);
v = {0, 9};
da un error:
expresión primaria esperada antes de ''{'' token
Y
error: expected '','' or '';'' antes del token ''=''
respectivamente.
También puedes hacer esto:
template <typename T>
class make_vector {
public:
typedef make_vector<T> my_type;
my_type& operator<< (const T& val) {
data_.push_back(val);
return *this;
}
operator std::vector<T>() const {
return data_;
}
private:
std::vector<T> data_;
};
Y úsalo así:
std::vector<int> v = make_vector<int>() << 1 << 2 << 3;