Если вы не знаете размер массива до времени выполнения, контейнер для использования будет std::vector<myStruct>
. Однако для этого вам нужно иметь конструктор по умолчанию в myStruct
.
Вы можете использовать std::transform
для создания myStruct
объектов из int
значений и заполнения std::vector
.
Демонстрационный код:
#include <vector>
#include <algorithm>
struct myStruct
{
int value;
myStruct() : myStruct(0) {}
myStruct(int input)
{
value = input*input;
}
};
int main()
{
// option #2 - using available array (??)
int input[5] = {1,2,3,4,5};
int size = sizeof(input)/sizeof(*input);
// array2 has to be of the right size before the call to std::transform
// std::transform does not call push_back. It simply assigns the value to
// the dereferenced iterator.
std::vector<myStruct> array2(size);
std::transform(std::begin(input),
std::end(input),
array2.begin(),
[](int v) -> myStruct { return myStruct(v); });
return(0);
}
Конструктор по умолчанию myStruct
можно избежать с помощью std::copy
и std::back_inserter
.
#include <vector>
#include <algorithm>
struct myStruct
{
int value;
myStruct(int input)
{
value = input*input;
}
};
int main()
{
int input[5] = {1,2,3,4,5};
// Create an empty vector.
std::vector<myStruct> array2;
// Add items to the vector by using std::copy and std::back_inserter.
std::copy(std::begin(input),
std::end(input),
std::back_inserter(array2));
return(0);
}