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