Можно ли как-то проинициализировать n
элементов std::vector<int>
по-умолчанию, т.е. чтобы он содержал n
неинициализированных значений, а не n
нулей? Рассматриваются любые легальные варианты (замена аллокатора? доступ к внутренней памяти?).
Можно заменить int на структуру с соответствующим конструктором, не инициализирующим значение. Например:
struct t_int
{
int value;
t_int() {} // Uninitilaized 'value' !
t_int(int i) : value(i) {}
t_int(const t_int& i) =default;
t_int(t_int&& i) =default;
operator int() const { return value; }
};
// test:
int main()
{
{ std::vector< t_int > test = { 1,2,3,4 }; }
std::vector< t_int > test(4);
cout << test[0]<<test[1]<<test[2]<<test[3] << endl;
return 0;
}
Вам нужен reserve. Вы не хотите инициализировать элементы, Вы хотите выделить память под них.
В противном случае не понятно, что именно Вы хотите. Вы пишите:
Можно ли как-то проинициализировать n элементов std::vector по-умолчанию, т.е. чтобы он содержал n неинициализированных значений, а не n нулей?
Т.е. Вы хотите проинициализировать n элементов, но так, чтобы они остались неинициализированными :)
Upd.: на данный момент я пришел к выводу, что использование custom-аллокатора в данном случае не поможет:
std::vector
- очевидно, что это никак не поможет, потому что конструктор по-умолчанию __vector_base никак не использует аллокатор, соответственно, мы не сможем переопределить поведение при вызове конструктора (по-умолчанию) класса std::vector
.template <class _Tp, class _Allocator>
inline _LIBCPP_INLINE_VISIBILITY
__vector_base<_Tp, _Allocator>::__vector_base(const allocator_type& __a)
: __begin_(nullptr),
__end_(nullptr),
__end_cap_(nullptr, __a)
{
}
Как видите, аллокатор используется только в одном месте - в конструкторе __end_cap. __end_cap это объект класса __compressed_pair, который, очевидно, не может содержать какие-либо вызовы для аллоцирования памяти в своем конструкторе.
Таким образом, если у нас нет таких "точек", в которых мы бы могли повлиять на аллокацию памяти для вектора при вызове конструктора по-умолчанию (или с одним параметром - аллокатором), нет и смысла использовать custom-аллокатор для Вашей проблемы.
Без сомнений, я мог допустить ошибку в своих рассуждениях - если так, с радостью услышу, как это работает на самом деле.
Взгляните на данную реализацию из библиотеки folly. Из названия следует, что это очень implementation-defined код в красивой обёртке (не без UB). Вас интересует folly::resizeWithoutInitialization
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Надо при помощи генератора случайных чисел сформировать 10 чисел в файлеНайти сумму максимального и минималного числа в файле
Есть ли возможность запускать js код в файлеts? Ибо когда копирую свой js код и вставляю в файл
Помогите пожалуйста! Пишу тетрис на JS и все время выдает ошибку! Я новичок, поэтому не пинайте за мой код
Перерыл много страниц с тем, где пишут, как использовать картинки из папки с проектом, делаю так, к примеру: