I tried to initialize the std::vector
std::vector<Particle> particles;
with instances of the simple struct
struct Particle {
int id;
double x;
double y;
double theta;
double weight;
};
by using emplace with an initializer list:
num_particles = 1000;
for (int i = 0; i < num_particles; i++)
{
particles.emplace_back({ i,0.0,0.0,0.0,1 });
}
But I get the error
C2660 "std::vector>::emplace_back": Function doesn't accept one argument
How can I fix that?
std::vector::emplaceexpects an iterator as argument too, because it inserts the element before that iterator's position.Another problem is that your
{i, 0.0, 0.0, 1}initialization doesn't work because it isn't in a context which tells what type it needs to instantiate. The reason there isn't any context is due toemplaceandemplace_backmember functions having generic parameters.If you just want to append elements to the vector, use
emplace_back.However,
emplace_backdepends on the element type having a valid constructor in order to work, as the element is initialized through parentheses. That changed in C++20, which now allows aggregate-initialization through parentheses without the need to define a valid constructor.So, up until C++17, your example would be changed to:
And in C++20 and later, you may do this instead: