Il costruttore da size_type chiama solo il costruttore di C una volta e quindi usa il suo costruttore di copie per il resto degli elementi.
Non valido dal C++11
. Guardate std::vector::vector documentation:
...
vettore (conteggio size_type, const T & valore, const Allocatore & alloc = Allocatore()); (2)
vettore esplicito (conteggio size_type, const Allocator & alloc = Allocator()); (3)
...
E poi:
...
2) costruisce il contenitore con le copie di conteggio di elementi con valore valore.
3) Costruisce il contenitore con numero di default istanze di T. Non vengono effettuate copie.
...
quindi è necessario il terzo costruttore std::vector<C>(size)
Sembra che questo comportamento esiste solo dal c++11
.
Non riesco a trovare un modo per farlo prima di c++11
. Poiché nessun costruttore può fare ciò, l'opzione sarebbe stata quella di creare un vettore vuoto, prenotare e quindi gli elementi emplace_back
. Ma emplace_back
è dal c++11
quindi ... siamo di nuovo al punto di partenza.
Potrebbe chiarire se sei bloccato con C++ 03? In caso contrario, non c'è alcun problema da risolvere. – juanchopanza
Anzi, stavo usando default di Xcode GNU C++ stdlib (di default per le destinazioni di distribuzione più grandi almeno), che include la versione precedente di std :: vector. Con lo stdlib di LLVM non c'è davvero alcun problema. – Danra
Se si imposta '-std = C++ 11' poi stdlib dovrebbe fare la cosa giusta anche se non è molto vecchio. – juanchopanza