Мне нравится создавать векторы с заданным размером и значением, например:
std::vector<std::string> names(10);
Однако это несколько раз приводило к неожиданным результатам. Например, в следующем коде каждый UniqueNumber
оказывается одинаковым:
#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() << " ";
}
}
Выход консоли:
0 0 0 0 0 0 0 0 0 0
Это имеет смысл при взгляде на конструктор std::vector:
explicit vector(size_type __n,
const value_type& __value = value_type(),
const allocator_type& __a = allocator_type());
По-видимому, вектор был инициализирован копиями одного и того же объекта.
Есть ли способ создания каждого объекта по умолчанию?