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