Информация об изменениях

Сообщение Копирование элементов std::vector от 02.09.2019 9:40

Изменено 02.09.2019 9:41 RussianFellow

Копирование элементов std::vector
Есть некоторая структура MyStruct, например такая:

typedef struct
{
long double field1;
long double field2;
//...
long double fieldN;
} My_Struct;

И есть вектор (std::vector) vect1, содержащий элементы типа My_Struct.
Я хочу создать другой вектор vect2, содержащий элементы типа My_Struct, который я заполняю элементами из первого вектора по своему определённому правилу--например, 0-ой элемент вектора vect1 я ставлю в 10-ую позицию вектора vect2, 1-ый элемент вектора vect1 я ставлю в 5-ую позицию вектора vect2, 2-ой элемент вектора vect1 я ставлю в 8-ую позицию вектора vect2.
Соответствующий код:

vector<My_Struct> vect1, vect2;

// заполнение вектора vect1 элементами с инициализацией полей у каждого элемента;
n = vect1.size();
vect2.reserve(n);
vect2.resize(n);
vect2[10] = vect1[0];
vect2[5] = vect1[1];
vect2[8] = vect1[2];

Вопрос состоит в следующем--для выделения памяти для второго вектора vect2 достаточно ли пользоваться функцией reserve или же надо вместо этого сделать цикл от 0 до n, в котором вызывалась бы функция push_back, параметром которой была бы переменная структурного типа My_Struct? Как правильно выделить память для второго вектора vect2 ?
Копирование элементов std::vector
Есть некоторая структура MyStruct, например такая:

typedef struct
{
    long double  field1;
    long double  field2;
    //...
    long double  fieldN;
} My_Struct;


И есть вектор (std::vector) vect1, содержащий элементы типа My_Struct.
Я хочу создать другой вектор vect2, содержащий элементы типа My_Struct, который я заполняю элементами из первого вектора по своему определённому правилу--например, 0-ой элемент вектора vect1 я ставлю в 10-ую позицию вектора vect2, 1-ый элемент вектора vect1 я ставлю в 5-ую позицию вектора vect2, 2-ой элемент вектора vect1 я ставлю в 8-ую позицию вектора vect2.
Соответствующий код:

vector<My_Struct>  vect1, vect2;

// заполнение вектора vect1 элементами с инициализацией полей у каждого элемента;
n = vect1.size();
vect2.reserve(n);
vect2.resize(n);
vect2[10] = vect1[0];
vect2[5] = vect1[1];
vect2[8] = vect1[2];


Вопрос состоит в следующем--для выделения памяти для второго вектора vect2 достаточно ли пользоваться функцией reserve или же надо вместо этого сделать цикл от 0 до n, в котором вызывалась бы функция push_back, параметром которой была бы переменная структурного типа My_Struct? Как правильно выделить память для второго вектора vect2 ?