2011-12-16 18 views
24

Ho il seguente struct nel mio codice C++ (sto usando Visual Studio 2010):Come inizializzare un array di struct in C++?

struct mydata 
{ 
    string scientist; 
    double value; 
}; 

Quello che vorrei fare è di essere in grado di inizializzare loro in un modo rapido, simile a l'inizializzazione array in C99 o l'inizializzazione di classe in C#, qualcosa á la:

mydata data[] = { { scientist = "Archimedes", value = 2.12 }, 
        { scientist = "Vitruvius", value = 4.49 } } ; 

Se ciò non è possibile in C++ per una serie di struct, posso farlo per un array di oggetti? In altre parole, il tipo di dati sottostante per un array non è così importante, è importante che io abbia un array, non un elenco e che io possa scrivere gli inizializzatori in questo modo.

+1

Non c'è alcun motivo per cui non dovrebbe funzionare ... (che sarebbe '.scientist = ...') Hai provato? – fge

+0

perché evitare il loop? –

+0

@fge Sì, si chiama inizializzazione di aggregazione ed è ulteriormente spiegato in dettaglio [qui] (http://en.cppreference.com/w/cpp/language/aggregate_initialization) – pfabri

risposta

46

La sintassi di C++ è quasi esattamente la stessa (lasciare i parametri denominati):

mydata data[] = { { "Archimedes", 2.12 }, 
        { "Vitruvius", 4.49 } } ; 

In C++ 03 funziona ogni volta che la matrice di tipo è un aggregate. In C++ 11 questo funziona con qualsiasi oggetto che abbia un costruttore appropriato.

+1

Ho pensato che l'inizializzazione _uniform di solito si riferiva a _list-initialization_ forma (cioè senza '=')? Non sono riuscito a trovare un riferimento per l'inizializzazione uniforme nello standard. –

+0

@CharlesBailey: È molto probabile che la mia terminologia sia errata qui - quindi, ho cancellato quella parte. –

+0

@ BjörnPollex Non sarebbe una brutta cosa rimettere in discussione, credo. – cjcurrie

Problemi correlati