【发布时间】:2022-01-23 05:42:33
【问题描述】:
我正在尝试编写从数组中定义的一组值中提取随机数的代码。一旦提取了一个数字,我希望它不能再次被提取,因此从数组中删除(或不考虑)。 除了数组的声明和数字的提取,我不知道该怎么做。你能帮帮我吗?
例子:
my array[]={1,2,3,4}
我想在每个循环中提取一个随机数。 第一个循环提取 3.
我希望不再提取 3。 (我的解决方案是将数组转入myarray[]={1,2,4},但我不知道该怎么做)
【问题讨论】:
-
注意:您不能从数组中删除数字。你能做的最好的就是在上面写。
-
旁注:这是一个可以帮助您入门的文档页面:en.cppreference.com/w/cpp/algorithm/random_shuffle
-
您使用
std::shuffle将vector洗牌一次,然后继续挑选并删除列表中的最后一项。你拿最后一个是因为它比删除第一个要便宜得多。当您删除第一个项目后,所有项目都向上移动一个空格以覆盖已删除的元素并更新vector的新端的位置。如果您删除最后一个,所有vector所要做的就是更新vector的末尾所在的位置。 -
如果你不能使用
vector,你可以用一个简单的数组做同样的事情。保留指向数组中最后一项的指针。当您移除最后一个时,将指针移回一个插槽。当指针位于数组的开头时,将数组标记为空。 -
@user4581301 random_shuffle 已被弃用,据我所知不应使用。此外,如果这是在 Arduino 上,如标签所示,STL 可能不可用。
标签: c++ arrays random arduino extract