2012-03-05 19 views
8

Sono stato con il seguente vettore di inizializzazione a valori in Code :: Blocks e compilatore MinGW:C++ vettore di inizializzazione

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

Dopo di che ho dovuto spostare il codice a un progetto di Visual Studio (C++) e io provato a costruire Ho ottenuto il seguente errore:
definizioni di funzioni locali sono illegali

Visual Studio compilatore non supporta questo tipo di inizializzazione?
Come è necessario modificare il codice per renderlo compatibile?
Voglio inizializzare il vettore e riempirlo di valori allo stesso tempo, proprio come un array.

+8

Questa sintassi è nuovo a C++ 11, e non ancora supportato in Visual C++. – ildjarn

+2

Questa sintassi è ora supportata in VS 2013. Origine: [Novità di Visual C++ in Visual Studio 2013] (https://msdn.microsoft.com/en-us/library/vstudio/hh409293.aspx) –

risposta

15

Visual C++ non supporta ancora gli elenchi di inizializzazione.

Il più vicino si può arrivare a questa sintassi è quello di utilizzare una matrice per contenere l'inizializzatore quindi utilizzare il costruttore gamma:

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

Un'altra alternativa è boost::assign:

#include <boost/assign.hpp> 


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

Si può fare quasi quello in VS2013

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

Esempio 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

Se stai usando Visual Studio 2015, il modo per inizializzare un vector usando un list è:

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

Così, il primo parametro (3) specifica dimensione e la lista è il secondo parametro.

+0

Ho provato il tuo modo ma, tutti gli elementi ha l'ultimo valore. – yane

0

Ho definito 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)) 

e utilizzare in questo modo:

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

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