Есть ли способ, чтобы построить новый std::vector
с неинициализированных (ненулевыми) значениями или даже красивее через генератор (похоже на std::generate_n()
) аргумент конструктора, отображающий его желательно нестандартные (непостоянные) значения без сначала инициализируют все элементы до нуля? Это потому, что я хочу, чтобы (random) mockup-creation 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
}
}
Я считаю, это сводится к поведению СТЛ Allocator используемого так как он отвечает за запись начальных нулей (или нет).
Если мы используем конструктор std::vector
с итераторами, нам сначала нужно выделить и записать случайные значения где-то еще, что еще хуже, чем с использованием push_back()
.
Итераторы - это то, как вы это делаете. Посмотрите http://www.boost.org/doc/libs/1_48_0/libs/iterator/doc/counting_iterator.html – Lalaland
@EthanSteinberg: решение итератора для std :: vector либо требует использования 'push_back()', что меньше эффективны или снова приводят к записи в элементы дважды. Для других, таких как 'std :: list', итераторы могут быть хорошим решением. –
Вы можете использовать итераторы в конструкторе ... – Lalaland