2016-03-13 12 views

risposta

9

C++ 11 ha una nozione di elenchi di inizializzatori. Per usarlo, aggiungi un costruttore che accetta un singolo argomento di tipo std::initializer_list<T>. Esempio:

#include <vector> 
#include <initializer_list> 
#include <iostream> 
struct S 
{ 
    std::vector<int> v_; 
    S(std::initializer_list<int> l) 
    : v_(l) 
    { 
    std::cout << "constructed with initializer list of length " << l.size(); 
    } 
}; 

int main() 
{ 
    S s = { 1, 2, 3 }; 
    return 0; 
} 
2

Un initializer_list possono essere (come altri contenitori STL) iterati e size possono essere interrogati. Questo ti permette di fare come indicato nell'altra risposta da yuyoyuppe di inviarlo immediatamente a vector. Ma potresti avere altri intenti per la tua inizializzazione e fare qualcosa come eseguire un'operazione direttamente sugli elementi della lista senza copiare.

#include <initializer_list> 
#include <iostream> 
#include <algorithm> 

struct S 
{ 
    int thesum; 
    int items; 
    S(std::initializer_list<int> l) : 
    thesum(std::accumulate(l.begin(), l.end(), 0)), 
    items(l.size()) 
    {} 
}; 

int main() 
{ 
    S s = { 1, 2, 3 }; 
    std::cout << s.items << std::endl; 
    std::cout << s.thesum << std::endl; 
    return 0; 
} 

Questo stampa

3 
6 

See:

Problemi correlati