加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 });
}

但是我得到了错误

C2660 “std::vector>::emplace_back”:
Function doesn’t accept one argument

我该如何解决这个问题?

解决方法

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});
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读