I jak tworzenie wektorów o określonej wielkości i wartości, na przykład w następujący sposób:Jak mogę zainicjować wektor std :: z parametrem wielkości i czy każdy obiekt jest tworzony niezależnie?
std::vector<std::string> names(10);
jednak to kilka razy w tym prowadzi do nieoczekiwanych wyników. Na przykład w poniższym kodzie każdy UniqueNumber
okazuje się mieć taką samą wartość:
#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 wyjście:
0 0 0 0 0 0 0 0 0 0
To ma sensu, gdy patrząc na konstruktora std :: vector w:
explicit vector(size_type __n,
const value_type& __value = value_type(),
const allocator_type& __a = allocator_type());
Podobno wektor został zainicjowany kopiami tego samego obiektu.
Czy istnieje również sposób na skonstruowanie każdego obiektu domyślnego?
Dzięki za oferowanie nieinwazyjnego rozwiązania. – StackedCrooked
@StackedCrooked, właściwie to jest uciążliwe, wolałbym używać obiektu do 'make_foo', byłoby znacznie lepiej. –