我试图初始化 std::vector
std::vector<Particle> particles;
带有简单结构的实例
struct Particle {
int id;
double x;
double y;
double theta;
double weight;
};
通过使用带有初始化列表的 emplace:
num_particles = 1000;
for (int i = 0; i < num_particles; i++)
{
particles.emplace_back({ i,0.0,0.0,0.0,1 });
}
但我得到了错误
C2660“std::vector>::emplace_back”:函数不接受一个参数
我该如何解决?
原文由 Oblomov 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::vector::emplace
也需要一个迭代器作为参数,因为它将元素插入到该迭代器的位置之前。另一个问题是您的
{i, 0.0, 0.0, 1}
初始化不起作用,因为它不在一个告诉它需要实例化什么类型的上下文中。没有任何上下文的原因是由于emplace
和emplace_back
成员函数具有通用参数。如果您只想将元素附加到向量,请使用
emplace_back
。但是,
emplace_back
依赖于具有有效构造函数的元素类型才能工作,因为元素是通过括号初始化的。这在 C++20 中发生了变化,现在允许通过括号进行聚合初始化,而无需定义有效的构造函数。因此,在 C++17 之前,您的示例将更改为:
而在 C++20 及更高版本中,您可以改为: