Есть ли способ создать новые std::vector
с неинициализированными (ненулевыми) значениями или даже более красивыми с помощью генератора (аналогично std::generate_n()
) аргумент конструктора, который выдает желаемые нестандартные (непостоянные) значения без , сначала инициализирующих все элементы в ноль?Это потому, что я хочу, чтобы (случайный) API создания макета был как можно более эффективным с точки зрения локальности, тем самым записывая элементы контейнера только один раз.Разве не было бы здорово иметь генератор-конструктор для std::vector
(и, возможно, других) ?!Почему C ++ еще не добавил это в стандарт?
Следующая, похожая на конструктор функция C иллюстрирует поведение однократной записи, которое я ищу для пользовательской инициализируемой конструкции std::vector
:
// Allocate-and-Generate a random int array of length \p n.
int * gen_rand(size_t n)
{
int *v = malloc(n); // allocate only
for (size_t i=0; i<n; i++) {
v[i] = rand(); // first write
}
}
Я полагаю, что все сводится к поведению используемого распределителя STL, поскольку он отвечает за запись начальных нулей (или нет).
Если мы используем конструктор std::vector
с итераторами, мы сначаладолжны распределять и записывать случайные значения в другом месте, даже хуже, чем при использовании push_back()
.