Mi piace la creazione di vettori con una data dimensione e valore, per esempio come questo:Come posso inizializzare un vettore std :: con un parametro di dimensione e avere ogni oggetto costruito in modo indipendente?
std::vector<std::string> names(10);
Tuttavia, un paio di volte questo ha portato a risultati imprevisti. Ad esempio, nel seguente codice ogni UniqueNumber
risulta avere lo stesso valore:
#include <iostream>
#include <string>
#include <vector>
struct UniqueNumber
{
UniqueNumber() : mValue(sInstanceCount++)
{
}
inline unsigned int value() const
{
return mValue;
}
private:
static unsigned int sInstanceCount;
unsigned int mValue;
};
int UniqueNumber::sInstanceCount(0);
int main()
{
std::vector<UniqueNumber> numbers(10);
for (size_t i = 0; i < numbers.size(); ++i)
{
std::cout << numbers[i].value() << " ";
}
}
Console uscita:
0 0 0 0 0 0 0 0 0 0
ha senso quando si guarda il costruttore di std :: vector:
explicit vector(size_type __n,
const value_type& __value = value_type(),
const allocator_type& __a = allocator_type());
Apparentemente il vettore è stato inizializzato con copie dello stesso oggetto.
C'è anche un modo per costruire ogni oggetto predefinito?
Grazie, per offrire una soluzione non intrusiva. – StackedCrooked
@StackedCrooked, in realtà è invadente, preferirei usare un oggetto per 'make_foo', sarebbe molto meglio. –