我有一个std::list
我目前正在使用 Fisher-Yates shuffle 随机化(参见http://en.wikipedia.org/wiki/Fisher-Yates_shuffle)。总而言之,我的代码在列表中执行了以下步骤:
- 循环遍历
list
. - 从当前位置开始用随机选择的元素交换元素,包括它自己。
因为列表不提供随机访问,这意味着我在第 1 步中迭代整个列表,并且对于每个元素我再次迭代,从那时起平均超过一半的剩余元素。这是我的程序性能的一个主要瓶颈,所以我正在寻求改进它。由于其他原因,我需要继续list
用作我的容器,但我正在考虑vector
在我的 randomize 函数开始时转换为 a ,然后在最后转换回list
。我的列表通常包含 300 - 400 个项目,所以我猜想容器之间的转换成本是值得的,以避免按顺序遍历这些项目。
我的问题是:这似乎是优化代码的最佳方式吗?有没有更好的办法?