【发布时间】:2021-04-09 20:43:38
【问题描述】:
所以,假设我有一个数组:
int arr[5];
除了从 0 到 4 遍历数组之外,是否可以按随机顺序执行此操作,并且迭代器不会两次遍历同一位置?
【问题讨论】:
-
当然,您只需要实现一个自定义迭代器即可。 C++ 可以做任何事情。您是否尝试过实现自己的自定义迭代器?
-
根据数组的大小,你最好只使用
suffle,然后像往常一样迭代 -
或者生成第二个整数数组,包含值
0到4。打乱第二个数组,并将其元素用作第一个数组的索引。 -
@SamVarshavchik 不是真的,我不知道那是一回事。我查一下
-
@wintersun 它必须有多随机,例如,您是否需要保证所有可能的排列都会发生?如果没有,一种便宜的方法是选择一个介于 0 和 4 之间的随机起始索引
n,以及一个介于 1 和 4 之间的随机步长k,然后迭代索引n = (n + k) % 5。与普通索引增量相比,这将为您提供 20 种不同的排列,同时不需要额外的空间和可忽略的额外时间。