c++ - random_shuffle 列表通过将它复制到一个 vector 然后返回

标签 c++ list vector stl shuffle

我试图通过先将列表复制到 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());

程序因运行时错误而崩溃:list iterator not dereferencable

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/

相关文章:

C++ 数组对坐标周围的值求和

c++ - 创建独立于构造函数参数的对象指针

list - 如何处理列表列表?

c++ - MFC 对话框返回 vector

c++如何声明返回对象 vector 的函数

r - 使用逻辑向量进行向量索引

c++ - Qt - 如何在 QString 中定义正则表达式

c++ - 从另一个列表中删除一个列表中的内容

java - 代码块未被触及

c# - 检查 List<List<int>> 是否包含 List<int>