我试图通过先将列表复制到 vector ,然后再返回到空列表来对列表进行洗牌。

vector<Agent*> tmpVector(agents_.size());
copy(agents_.begin(), agents_.end(), tmpVector.begin());
random_shuffle(tmpVector.begin(), tmpVector.end());
agents_.clear();
copy(tmpVector.begin(), tmpVector.end(),agents_.begin());

程序因运行时错误而崩溃:列表迭代器不可取消

1-代码有什么问题。

2-列表包含指针。我认为如果上述方法可行,则不会出错(因为指针值不会更改,并且以后仍可以使用它们引用分配的变量),对吗?

谢谢。

最佳答案

我认为问题出在这两行:

agents_.clear();
copy(tmpVector.begin(), tmpVector.end(),agents_.begin());

第一行清除了agents_列表,因此现在为空。然后,下一行尝试将agents_中存储的元素序列从第一个元素开始,替换为[tmpVector.begin(), tmpVector.end())范围的内容。这将导致未定义的行为,因为列表中没有元素。

要解决此问题,请尝试从上一行删除对agents_.clear()的调用。这将导致copy调用使用适当的改组值覆盖agents_列表中的现有元素。

希望这可以帮助!

关于c++ - 通过将random_shuffle列表复制到 vector 并返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15607823/

10-10 04:22