2012-03-05 36 views
8

He estado usando el siguiente vector de inicialización con valores en Code :: Blocks y MingW compilador:C++ vector de inicialización

vector<int> v0 {1,2,3,4}; 

Después de eso me tenía que mover el código a un proyecto de Visual Studio (C++) y yo intentado construir Tengo el siguiente error:
definiciones de funciones locales son ilegales

Visual Studio compilador no admite este tipo de inicialización?
¿Cómo debo cambiar el código para que sea compatible?
Quiero inicializar vector y llenarlo con valores al mismo tiempo, al igual que una matriz.

+8

Esta sintaxis es nuevo en C++ 11, y sin embargo no admitido en Visual C++. – ildjarn

+2

Esta sintaxis ahora es compatible con VS 2013. Fuente: [Novedades de Visual C++ en Visual Studio 2013] (https://msdn.microsoft.com/en-us/library/vstudio/hh409293.aspx) –

Respuesta

15

Visual C++ aún no admite listas de inicializadores.

Lo más cerca que se puede llegar a esta sintaxis es utilizar una matriz para contener el inicializador a continuación, utilizar la gama constructor:

std::array<int, 4> v0_init = { 1, 2, 3, 4 }; 
std::vector<int> v0(v0_init.begin(), v0_init.end()); 
1

Otra alternativa es boost::assign:

#include <boost/assign.hpp> 


using namespace boost::assign; 
vector<int> v; 
v += 1,2,3,4; 
4

Usted puede hacer casi que en VS2013

vector<int> v0{ { 1, 2, 3, 4 } }; 

Ejemplo completo

#include <vector> 
#include <iostream> 
int main() 
{  
    using namespace std; 
    vector<int> v0{ { 1, 2, 3, 4 } }; 
    for (auto& v : v0){ 
     cout << " " << v; 
    } 
    cout << endl; 
    return 0; 
} 
-2

Si está utilizando Visual Studio 2015, la manera de inicializar una vector utilizando un list es:

vector<int> v = {3, (1,2,3)}; 

Así, el primer parámetro (3) especifica el tamaño y la lista es el segundo parámetro.

+0

Intenté su manera pero, todos los elementos tienen el último valor. – yane

0

he definido una macro:

#define init_vector(type, name, ...)\ 
    const type _init_vector_##name[] { __VA_ARGS__ };\ 
    vector<type> name(_init_vector_##name, _init_vector_##name + _countof(_init_vector_##name)) 

y utilizar de esta manera:

init_vector(string, spell, "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"); 

for(auto &a : spell) 
    std::cout<< a <<" ";