gpt4 book ai didi

c++ - 动态数组初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:14:22 25 4
gpt4 key购买 nike

我想制作一个 foo 的动态数组,其中项目的数量为 x。参数 y 和 z 将被传递给项目 foo 的构造函数。我希望做类似的事情:

Foo* bar = new Foo(y, z)[x];

然而,这会产生以下编译器错误:

 error: expected `;' before '[' token

所以在与一位有经验的 friend 交谈后,他给了我这个,他承认这是一种懒惰的做法,但它确实有效。我在想,有没有更好/正确的方法?

Foo* bar = (Foo*) new int[x];
for (int i = 0; i < x; i++) {
bar[i] = Foo(y, z);
}

最佳答案

“我想制作一个动态数组”所以使用 std::vector,它的存​​在是有原因的。

std::vector<foo> bar(x, foo(y, z));

这将创建一个动态数组,其中 x 元素初始化为 foo(y, z)


上面的代码制作了第二个参数的拷贝x 次。如果您想为 vector 生成值,请使用generate_n:

std::vector<double> weights;
std::generate_n(std::back_inserter(weights), x, ...);

您将 ... 替换为要调用的函数或仿函数,它会返回一个值。通常你做一个仿函数:

struct generate_weight
{
double operator()() const
{
return random(1e-3);
}
};

给予:

std::generate_n(std::back_inserter(weights), x, generate_weight());

如果您的编译器支持 C++0x,您可以利用 lambda。它们做同样的事情,除了它们使代码简洁和本地化:

std::generate_n(std::back_inserter(weights), x,
[](){ return random(1e-3); } );

关于c++ - 动态数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629553/

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