Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
松开或松开c++;洗牌函数 有人能告诉我们如何用C++的洗牌功能来撤销或取消洗牌的数组吗?它可以通过以下链接建立:_C++_Arrays - Fatal编程技术网

松开或松开c++;洗牌函数 有人能告诉我们如何用C++的洗牌功能来撤销或取消洗牌的数组吗?它可以通过以下链接建立:

松开或松开c++;洗牌函数 有人能告诉我们如何用C++的洗牌功能来撤销或取消洗牌的数组吗?它可以通过以下链接建立:,c++,arrays,C++,Arrays,我想做的是撤消我的洗牌数组。 我用C++ Syle函数来拖曳数组,我寻找一个函数来解这个数组。 示例:数组arr{0,1,2,3,4} shuffle(arr.begin(), arr.end(), seed); 可能的输出:4,0,2,1,3 然后我需要unsuffle函数来撤销arr元素的位置,就像开始时一样 例: unshuffle(arr.begin(), arr.end(), seed); 输出:0,1,2,3,4 谢谢这个设计怎么样(使用一个虚构的类Array,可能是std::A

我想做的是撤消我的洗牌数组。 我用C++ Syle函数来拖曳数组,我寻找一个函数来解这个数组。 示例:
数组arr{0,1,2,3,4}

shuffle(arr.begin(), arr.end(), seed);
可能的输出:
4,0,2,1,3

然后我需要unsuffle函数来撤销arr元素的位置,就像开始时一样

例:

unshuffle(arr.begin(), arr.end(), seed);
输出:
0,1,2,3,4

谢谢

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

您有一个类
ReversableShuffleArray
。这个类有两个成员,
Array data
Array shuffle\u order
,以及方法
void shuffle
Datatype&operator[]

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

调用
shuffle
时,不是
data
而是
shuffle\u顺序
被洗牌

运算符[](大小索引)
返回数据[shuffle\u order[index]]定义。就这么简单<代码>数据
本身永远不会被洗牌

(如何进行非无序访问应该是显而易见的,所以我不会执行它。)

当然,这也可以按程序进行,不需要上课

或者,您可以再次洗牌一个计数,如
shuffle\u order
,使用它将其应用于所讨论的数组,然后从中创建另一个数组
reverse\u shuffle\u order
,您可以使用反向过程

(如果你对洗牌没有控制,这对你没有帮助,但是在这个问题上,你写了“我用C++ +函数来洗牌”,所以我假设你这样做了。

这个设计如何(使用虚构的类<代码>数组<代码> >可能是<代码>:ST::数组< /代码>):

您有一个类
ReversableShuffleArray
。这个类有两个成员,
Array data
Array shuffle\u order
,以及方法
void shuffle
Datatype&operator[]

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

调用
shuffle
时,不是
data
而是
shuffle\u顺序
被洗牌

运算符[](大小索引)
返回数据[shuffle\u order[index]]定义。就这么简单<代码>数据
本身永远不会被洗牌

(如何进行非无序访问应该是显而易见的,所以我不会执行它。)

当然,这也可以按程序进行,不需要上课

或者,您可以再次洗牌一个计数,如
shuffle\u order
,使用它将其应用于所讨论的数组,然后从中创建另一个数组
reverse\u shuffle\u order
,您可以使用反向过程


(如果你对洗牌没有控制,这对你没有帮助,但是在这个问题上,你写了“我用C++ + SULE函数来洗牌”,所以我假设你这样做了。

这不是你可以反转的东西……如果你需要洗牌和洗牌,你可能会拷贝数组NAD KEPPONY拷贝不变。如果无法创建副本并且数组最初已排序(例如在您的示例中),则可以通过排序来“取消填充”它:
std::sort(arr.begin(),arr.end())
。如果您设计了自定义随机数生成器,则可以反转。然后你可以用一种反向随机性再次洗牌。我只是假设;我不知道thar是否会起作用。这不是你可以逆转的东西……如果你同时需要无序和非无序,你可能应该复制数组并保持原样。或者,如果你不能复制并且数组最初被排序(比如在你的例子中),那么你可以通过排序来“取消无序”:
std::sort(arr.begin()),arr.end())
。如果您设计了一个自定义的随机数生成器,则可能可以反转。然后你可以用一种反向随机性再次洗牌。我只是假设;我不知道他是否行得通。谢谢你,你救了我的命life@Enock很高兴我能帮上忙。那么接受答案就好了;)(点击评级下方的复选标记)谢谢,您保存了我的life@Enock很高兴我能帮上忙。那么接受答案就好了;)(单击其评级下方的复选标记)