Создать один массив объектов из двух. C++

102
15 сентября 2021, 07:10

Допустим у меня есть два массива по 5 объектов класса Obj. Я хочу поместить эти объекты из разных массивов в один результирующий, размерностью 10 элементов. Как правильно выделить под него память? Если я напишу вот так:

Obj* result_arr = new Obj[10];

или вот так

Obj result_array[10];

а затем цикл:

for (int i = 0; i < 5; i++) {
    result_arr[i] = arr1[i];
    result_arr[i + 5] = arr2[i];
}

то получится так, что у меня 10 раз вызовется конструктор класса Obj, если такой есть, при этом созданные объекты не будут никак использоваться. А если его нет, то вообще будет ошибка компиляции. Единственное что мне пришло в голову это написать вот так

Obj* result_arr = malloc(sizeof(Obj) * 10);

но это же колхоз. Как то можно сделать это красиво в С++ стиле? И как vector справляется с подобной задачей? Ведь он добавляет элементы в уже зарезервированную область памяти.

Answer 1

Готового решения для такого специального случая, как "инициализировать массив из нескольких отдельных диапазонов", нет. Так что в вашем случае остается лишь выделение "сырой" памяти с последующим std::uninitialized_copy

void *raw = std::aligned_alloc(alignof(Obj), sizeof(Obj) * 10);
Obj *arr = static_cast<Obj *>(raw);
std::uninitialized_copy_n(arr1, 5, arr);
std::uninitialized_copy_n(arr2, 5, arr + 5);
READ ALSO
Дебаг C++ кода в VS Code

Дебаг C++ кода в VS Code

При попытке запуска для дебага (F5, брекпойнт поставлен) кода на C++ в Visual Studio Code (ОС Ubuntu 1804) возникает ошибка

110
Не могу создать WinForms C++ проект в Visual Studio

Не могу создать WinForms C++ проект в Visual Studio

Всем приветСоздаю проект Winforms C++

169
Функция не возвращает string

Функция не возвращает string

Делаю функцию, преобразовывающую номер из номера из "+7(9хх)хх-ххх-хх" в "89ххххххххх"

98
указатель на функцию в классе

указатель на функцию в классе

Понемножку перехожу с си на c++У меня возникла такая проблема

116