2013-06-28 13 views
11

È possibile ottenere risultati identici utilizzando contenitori diversi in C++. Per esempio . .Che tipo viene utilizzato automaticamente per i contenitori?

std::array<int, 5> v = {1,2,3,4,5}; 
    for(auto i : v) 
     std::cout << i << ", "; 

o

std::vector<int> v = {1,2,3,4,5}; 

o

int v[] = {1,2,3,4,5}; 

ecc. .

Quindi quale contenitore utilizza auto qui?

auto v = {1,2,3,4,5}; 
    for(auto i : v) 
     std::cout << i << ", "; 

risposta

18

std::initializer_list<int>


Non

così difficile da controllare da sé, si può sempre decltype(v), e poi confrontarlo con detto tipo di elenco.

Che ha un'altra bella struttura, che a volte è molto utile e potrebbe interessarti:

for (auto i : {1,2,3,4,5}) 
    std::cout << i << ", "; 

Si può essere fatto perché initializer_list mantiene l'interfaccia gamma standard.

+1

'<< TYPE_DESC (v); auto v = {1,2,3,4,5}; '/' lvalue initializer_list 'Corretto. +1 –

+2

Due piccole osservazioni: In senso stretto, 'initializer_list' non è un contenitore nel senso dello standard. Il tuo esempio funziona, perché lo standard definisce esplicitamente le dichiarazioni basate su ranghi di quella forma. A prima vista non esiste un'entità di tipo 'initializer_list'. Un tale oggetto viene introdotto implicitamente, quindi devi includere '', ma non puoi "vederlo". – MWid

Problemi correlati