Cómo inicializar un vector en C ++

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 v(2) = {34, 23}; 

O

 vector v(2); v = {0, 9}; 

da un error:

expresión primaria esperada antes de ‘{‘ token

Y

error: expected ‘,’ or ‘;’ antes del token ‘=’

respectivamente.

Con el nuevo estándar de C ++ (puede necesitar que se habiliten indicadores especiales en su comstackdor) simplemente puede:

 std::vector v { 34,23 }; // or // std::vector v = { 34,23 }; 

O incluso:

 std::vector v(2); v = { 34,23 }; 

En los comstackdores 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 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  T* begin(T(&arr)[N]) { return &arr[0]; } template  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 v(begin(vv), end(vv)); 

También puedes hacer esto:

 template  class make_vector { public: typedef make_vector my_type; my_type& operator<< (const T& val) { data_.push_back(val); return *this; } operator std::vector() const { return data_; } private: std::vector data_; }; 

Y úsalo así:

 std::vector v = make_vector() << 1 << 2 << 3;