gpt4 book ai didi

c++ - 使用数组聚合初始化结构数组

转载 作者:太空狗 更新时间:2023-10-29 21:32:06 26 4
gpt4 key购买 nike

在 C++ (14/17) 中,如何在没有硬编码的大括号括起来的初始化器列表的情况下初始化一个(大)结构数组?

例如,如果需要大量的初始化或者直到运行时才知道初始化值,你会怎么做?好像没有这方面的帖子。我已经创建了一个我希望做的简单示例。希望有人能解释这是如何做到的:

struct myStruct
{
int value;

myStruct(int input)
{
value = input*input;
}
};

int main()
{
// option #1 - aggregate initialization
myStruct array1[] {{1},{2},{3},{4},{5}};

// option #2 - using available array (??)
int input[5] = {1,2,3,4,5};
myStruct array2[] { input[] } ; // something like this?

return(0);
}

最佳答案

如果您直到运行时才知道数组的大小,则要使用的容器是 std::vector<myStruct> .但是,要做到这一点,您需要在 myStruct 中有一个默认构造函数。 .

您可以使用 std::transform build 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);
}

关于c++ - 使用数组聚合初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com