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

Creating multiple structs in one for loop

本文关键字:创建 结构 循环 一个 for      更新时间:2023-10-16

所以我有一个类似

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

其中 pair 定义为

struct pair {
    int u;
    float d;
}

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

谢谢!

代码很好。

p复制到队列中;复制完成后原始文件会发生什么并不重要。

是的,您的代码按原样工作。调用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]));
}

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