c++ - 撤消或取消随机播放 C++ 随机播放函数

标签 c++ arrays

谁能告诉我如何使用 C++ 洗牌函数撤消或取消洗牌数组?可以通过此链接找到它:http://www.cplusplus.com/reference/algorithm/shuffle/

我想做的是撤消我打乱的数组。 我使用 C++ suffle 函数来打乱我的数组,并寻找一个函数来取消打乱这个数组。

示例:array<int, 5> arr{0,1,2,3,4};

shuffle(arr.begin(), arr.end(), seed);

可能的输出: 4,0,2,1,3

然后我需要 unshuffle 函数来撤消 arr 元素的位置,就像在开始时一样。

示例:

unshuffle(arr.begin(), arr.end(), seed);

输出: 0,1,2,3,4

谢谢

最佳答案

这个设计怎么样(使用虚构类 Array 可能是 std::array ):

你有一个类 ReversableShuffledArray .这个类有两个成员,Array<Datatype> dataArray<size_t> shuffle_order和方法 void shuffleDatatype& operator[] .

它通过以某种方式(尤其是移动构造函数)向其提供数据来初始化,并将数据放入成员 data 中。 .此时,它创建了shuffle_order的内容。 ,其中包含 {0,1,2,3....}并且与 data 大小相同.

shuffle被称为,不是 data但是shuffle_order被打乱。

operator[](size_t index)return data[shuffle_order[index]]; 定义.就那么简单。 data本身永远不会被洗牌。

(应该很清楚如何进行非混洗访问,所以我不会执行它。)

当然,这也可以在没有类的情况下通过程序完成。

或者,您可以再次打乱计数,例如 shuffle_order ,用它把它应用到有问题的数组上,然后创建另一个数组 reverse_shuffle_order从中您可以使用相反的过程。

(如果您无法控制改组,这对您没有帮助,但是在问题中,您写道“我使用 C++ suffle 函数来改组我的数组”,所以我假设您可以。)

关于c++ - 撤消或取消随机播放 C++ 随机播放函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54551330/

相关文章:

c++ - 当 Fortran 库中的 C++ 可执行文件链接到 C++ 库中的 main 时,链接器错误

Java - 从方法的参数获取数组位置

java - 在数组中插入数据库元素。

c++ - 使用 stringstream 在内存中超出范围的问题

c++ - 在cpp中对象初始化后设置数组的边界

javascript - Javascript 中的 bool 数组掩码

arrays - 数组内数组的插值

c++ - 在没有任何服务器的情况下使用sql

c++ - 我应该在 C++ 中使用 int 还是 long?

c++ - 系统范围的API钩子(Hook)