向量改组是各种编程任务中的常见操作。虽然有多种方法可以实现这一目标,但选择一种可重复用于不同场景的通用且高效的方法至关重要。
在提供的代码片段中,当前的方法涉及创建一个中间数组并了解项目类型,这可能导致效率低下。使用 C 11 及更高版本提供了更高效、可重用的解决方案。
使用 C 11 及更高版本
#include <algorithm> #include <random> auto rng = std::default_random_engine {}; std::shuffle(std::begin(cards_), std::end(cards_), rng);
此代码使用 std::shuffle 函数,这需要一个随机引擎作为第三个参数。 std::default_random_engine 用于生成随机数。通过使用此函数,我们可以在不创建中间数组或知道项目类型的情况下对元素进行随机排列。
使用 C 98
对于 C 98,我们可以使用std::random_shuffle 函数:
#include <algorithm> std::random_shuffle(cards_.begin(), cards_.end());
播种随机数引擎
为了每次生成不同的排列,我们可以使用 std::random_device:
auto rd = std::random_device {}; auto rng = std::default_random_engine { rd() }; std::shuffle(std::begin(cards_), std::end(cards_), rng);
这种方法确保每次生成不同的洗牌序列程序执行的时间。
以上是如何在 C 中高效且可重用地打乱向量?的详细内容。更多信息请关注PHP中文网其他相关文章!