【问题标题】:Inserting a struct variable into a c++ vector inside a loop [duplicate]将结构变量插入循环内的c ++向量中[重复]
【发布时间】:2021-02-12 18:26:37
【问题描述】:

我有一个名为“Cell”的结构向量,其中包含位置 (x, y)、半径和其他一些变量。 在程序执行期间,我需要在向量末尾添加更多单元格,因为我循环遍历向量并检查条件。 在循环内创建新单元格并使用 push_back 将它们添加到向量中是否安全?或者这会在循环结束后结构被破坏(是吗?)时产生内存问题?代码或多或少如下:

for (Cell c : cells) {
    if (my_condition) {
        Cell newc;
        // define cell properties
        cells.push_back(newc);
    }
}

提前致谢

【问题讨论】:

  • 请在灌封示例代码时始终显示minimal reproducible example。在您的情况下,很明显,您不能安全地更改 cells 向量同时迭代它。但总的来说,请遵守发布完整的可编译代码,这完全重现了您遇到的问题。

标签: c++


【解决方案1】:

这是不安全的,因为当push_back 导致向量大小增加时,过去结束的迭代器将失效。

【讨论】:

  • 你是对的,push_back 破坏了一切。我必须事先创建一个向量并保留内存(使用保留函数),然后将新单元格插入那些保留位置
【解决方案2】:

只要 Cell 类正确定义(如果需要)复制和移动 ctor,它就是安全的。

如果 Cell 是 POD,应该没问题。

【讨论】:

  • 不,这不安全,以防您修改同一个 std::vector<T> 实例。 T 是否是 POD 无关紧要。
猜你喜欢
  • 2015-05-21
  • 2017-12-18
  • 2016-05-09
  • 2021-09-10
  • 1970-01-01
  • 2017-02-09
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多