2012-04-19 23 views
23

Posso inizializzare un vettore STL con 10 dello stesso numero intero in un elenco inizializzatore? I miei tentativi finora mi hanno fallito.Posso inizializzare un vettore STL con 10 dello stesso numero intero in un elenco inizializzatore?

+6

C'è un [ 'std :: vector <>' costruttore] (http://en.cppreference.com/w/cpp/container/vector/vector) (2) che lo fa; perché vorresti una lista di inizializzazione? – ildjarn

+1

@ildjarn: Penso che intenda in un elenco di inizializzazione del costruttore e non nel corpo del costruttore. – GManNickG

+0

@GManNickG: A me non sembra così. L'OP chiede un modo per inizializzare un vettore con il numero X di elementi tutti impostati sullo stesso valore. Sì, menziona un elenco di inizializzazione, ma visto che c'è già un costruttore che soddisfa il * requisito * che dovrebbe essere abbastanza buono –

risposta

25

Credo che si intende questo:

struct test { 
    std::vector<int> v; 
    test(int value) : v(100, value) {} 
}; 
+5

Questa risposta solo in codice è scarsamente documentata e più complicata del necessario. Vedere la risposta di Ed S. sotto. – Blake

+5

@ Cokemonkey11: questa risposta * non * è affatto documentata, puoi trovare la documentazione nel tuo riferimento preferito (il mio è cppreference). È * non * più complicato del necessario, senza la classe e la risposta del costruttore Ed S. non inizializza un vettore * in una lista di inizializzazione *, che è parte della domanda. In questo caso non sarebbe molto importante, ma considerate se la domanda riguardasse una serie di interi, l'inizializzazione nello stack e come parte dell'elenco di inizializzazione siano diversi. –

0

potete inserire quello che state facendo

int i = 100; 
vector<int> vInts2 (10, i); 

vector<int>::iterator iter; 
for(iter = vInts2.begin(); iter != vInts2.end(); ++iter) 
{ 
    cout << " i " << (*iter) << endl; 
} 
4

Se stai usando C++ 11 e il GCC, si potrebbe fare questo:

vector<int> myVec() {[0 ... 99] = 1}; 

Si chiama a distanza di inizializzazione ed è un Estensione solo GCC.

+1

Wow, non ne ho mai nemmeno sentito parlare. Certo, è meglio usare semplicemente il costruttore giusto. – chris

+1

Sì. Ma questo è utile per gli array e le strutture. Comunque, GCC ha un sacco di estensioni che fanno cose folli. Meglio attenersi al C++ standard. –

+0

L'estensione "Designated Initializers" è disponibile solo per il codice C, non C++. Per l'elenco delle estensioni GCC disponibili vedi https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions e https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions .html # C_002b_002b-Estensioni –

2

È possibile farlo con std::vector costruttore:

vector(size_type count, 
       const T& value, 
       const Allocator& alloc = Allocator()); 

Quali prende count e value da ripetere.

Se si desidera utilizzare gli elenchi di inizializzazione è possibile scrivere:

const int x = 5; 
std::vector<int> vec {x, x, x, x, x, x, x, x, x, x}; 
81

utilizzare il costruttore del caso, che prende una dimensione e un valore predefinito.

int number_of_elements = 10; 
int default_value = 1; 
std::vector<int> vec(number_of_elements, default_value); 
2

L'elenco di inizializzazione per il vettore è supportato dal C++ 0x. Se si è compilato con C++ 98

int number_of_elements = 10; 
int default_value = 1; 
std::vector<int> vec(number_of_elements, default_value); 
Problemi correlati