C++ 如何在不重复的情况下随机迭代向量的每个元素

C++ 如何在不重复的情况下随机迭代向量的每个元素,c++,c++11,vector,C++,C++11,Vector,我尝试使用rand()和srand()来生成随机索引号,但我仍然得到重复的索引是否有其他方法可以迭代向量buy的所有元素而不影响向量元素的顺序 我不能random\u shuffle(),因为random shuffle会改变向量元素的顺序,而这些元素的顺序至关重要。用于用索引填充向量。然后使用来洗牌索引向量。使用索引向量迭代主向量 将实现留待操作实践。停止使用rand()并开始。您可以复制向量并将其洗牌吗?我刚刚尝试使用random\u device dev;mt19937 rng(dev()

我尝试使用
rand()
srand()
来生成随机索引号,但我仍然得到重复的索引是否有其他方法可以迭代向量buy的所有元素而不影响向量元素的顺序 我不能
random\u shuffle()
,因为random shuffle会改变向量元素的顺序,而这些元素的顺序至关重要。

用于用索引填充向量。然后使用来洗牌索引向量。使用索引向量迭代主向量


将实现留待操作实践。

停止使用
rand()
并开始。您可以复制向量并将其洗牌吗?我刚刚尝试使用
random\u device dev;mt19937 rng(dev());统一分布区6(0,ICSC.size());//范围[1,6]中的分布可以将索引向量洗牌,然后按索引获取向量元素。据我所知,没有更好的无需替换的随机抽样方法,因为您需要跟踪已使用的索引。
shuffle()
仍会破坏顺序,因为我需要从一开始就把每4个向量元素放在一起。我通过创建一个带索引的向量解决了这个问题,但我没有使用
std::iota
@TonyMogoa great。我更喜欢我自己,它很方便:)