c – 如何在std ::: vector中设置结构
发布时间:2020-12-16 10:37:21 所属栏目:百科 来源:网络整理
导读:我试图初始化std :: vector std::vectorParticle particles; 与简单结构的实例 struct Particle { int id; double x; double y; double theta; double weight;}; 通过使用带有初始化列表的emplace: num_particles = 1000;for (int i = 0; i num_particles;
我试图初始化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,1 }); } 但是我得到了错误
我该如何解决这个问题? 解决方法
std::vector::emplace期望迭代器也作为参数,因为它在迭代器的位置之前插入元素.如果你只想将元素附加到向量,请使用
emplace_back.另一个问题是{i,1}是一个初始化列表,而不是粒子.如果要实例化Particle结构,则需要告诉编译器:Particle {i,1}.编辑:那是因为emplace_back期望参数稍后构造粒子结构,所以你的尝试将无法工作,因为参数本身将被推导为初始化列表.
另一方面,在这种情况下,std :: vector :: push_back的参数是粒子类型,所以在这里你可以传递那个init-list,因为构造像这样的对象称为聚合初始化(即粒子p = {i,1}有效). 最终代码: for (int i = 0; i < num_particles; i++) { particles.push_back({i,1}); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |