在一个for循环中创建多个结构

时间:2012-11-28 19:52:11

标签: c++

所以我有一个类似

的循环
for (r = 0; r < k; r++) {
    pair p = {r, D[r]};
    queue.push(p);
}

其中pair被定义为

struct pair {
    int u;
    float d;
}

这是创建k对并将其推送到优先级队列的合法方式吗?即使p每次被覆盖,这些对仍然以原始形式存在于队列中吗?或者已经在队列中的每一对是否自动更新为p的新值,从而导致队列中充满相同副本的相同副本?

谢谢!

2 个答案:

答案 0 :(得分:4)

代码很好。

p复制纳入队列;复制完成后,原件发生了什么并不重要。

答案 1 :(得分:1)

是的,您的代码按原样运行。调用p的默认复制构造函数,并将副本推送到queue。但是,您可以通过添加构造函数来简化代码。如果您将pair定义为:

struct pair {
    pair(int u_, float d_) : u(u_), d(d_){}
    int u;
    float d;
};

然后在你的循环中,你可以简单地做:

for (r = 0; r < k; r++) {
    queue.push_back(pair(r, D[r]));
}

这样,你有意识地推送副本就更清楚了。另外,请确保在结构声明结束后有;!如果你忘了,你最终可能会遇到一些神秘的编译器错误。