最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中std::shuffle的使用小結(jié)

 更新時間:2025年04月08日 09:37:17   作者:點云SLAM  
std::shuffle是C++標(biāo)準(zhǔn)庫中的一個函數(shù),用于對容器中的元素進行隨機排列,本文主要介紹了C++中std::shuffle的使用小結(jié),具有一定的參考價值,感興趣的可以了解一下

std::shuffle 的使用

std::shuffle 是 C++ 標(biāo)準(zhǔn)庫中的一個函數(shù),用于對容器中的元素進行隨機排列(洗牌)。它的實現(xiàn)基于現(xiàn)代隨機數(shù)生成器,因此比 std::random_shuffle 更安全和靈活(std::random_shuffle 在 C++14 被棄用,C++17 后被移除)。

1. 語法

#include <algorithm>
#include <random>

std::shuffle(RandomIt first, RandomIt last, URBG&& g);
  • first 和 last:表示要隨機打亂的范圍([first, last))。
  • g:隨機數(shù)生成器,必須符合 UniformRandomBitGenerator(如 std::mt19937)。
  • 返回值:無(函數(shù)會直接修改輸入范圍的內(nèi)容)。

2. 使用示例

#include <iostream>
#include <vector>
#include <algorithm>
#include <random>  // 需要包含 <random> 頭文件

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    // 創(chuàng)建隨機數(shù)生成器
    std::random_device rd;  // 隨機設(shè)備(硬件熵源)
    std::mt19937 g(rd());   // 梅森旋轉(zhuǎn)算法(常用的隨機數(shù)引擎)

    // 打亂順序
    std::shuffle(vec.begin(), vec.end(), g);

    // 輸出打亂后的結(jié)果
    std::cout << "Shuffled vector: ";
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

3. 代碼解析

  • 創(chuàng)建隨機數(shù)生成器

    • std::random_device rd;:用于生成種子。
    • std::mt19937 g(rd());:使用梅森旋轉(zhuǎn)算法(Mersenne Twister)作為偽隨機數(shù)引擎。
  • 調(diào)用 std::shuffle 進行洗牌

    • std::shuffle(vec.begin(), vec.end(), g); 重新打亂 vec 中的元素順序。
  • 打印打亂后的數(shù)組

    • 遍歷并輸出 vec。

4. 示例輸出

Shuffled vector: 3 7 5 9 1 4 2 8 6

(輸出的順序是隨機的,每次運行結(jié)果可能不同。)

5. 重要說明

為什么不用 std::random_shuffle?

  • std::random_shuffle 需要內(nèi)部調(diào)用 rand(),它的隨機性較弱,而且 rand() 不是線程安全的。
  • std::shuffle 允許使用高質(zhì)量的隨機數(shù)生成器(如 std::mt19937)。

std::mt19937 vs std::default_random_engine

  • std::default_random_engine 可能因不同的編譯器實現(xiàn)不同,因此推薦使用 std::mt19937。

如何使用固定種子進行可復(fù)現(xiàn)的隨機洗牌?

std::mt19937 g(42);  // 42 作為固定的隨機種子
std::shuffle(vec.begin(), vec.end(), g);

這樣每次運行代碼都會得到相同的打亂結(jié)果。

6. 適用場景

  • 隨機排序數(shù)據(jù)
  • 生成隨機測試用例
  • 洗牌(如撲克牌游戲)
  • 打亂數(shù)據(jù)以避免排序偏差(如機器學(xué)習(xí)數(shù)據(jù)預(yù)處理)

7. 結(jié)論

std::shuffle 是現(xiàn)代 C++ 中推薦的隨機洗牌方法,結(jié)合 std::mt19937 可以提供高質(zhì)量的隨機性,適用于各種隨機排列的場景。

?? 推薦使用 std::shuffle 代替 std::random_shuffle,并搭配 std::mt19937 以獲得更好的隨機性和可控性!

到此這篇關(guān)于C++中std::shuffle的使用小結(jié)的文章就介紹到這了,更多相關(guān)C++ std::shuffle內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中的線程信號控制詳解

    C語言中的線程信號控制詳解

    這篇文章主要通過一些示例為大家詳細(xì)介紹一下C語言中的線程信號控制,文中的示例代碼講解詳細(xì),對我們深入了解C語言有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2023-02-02
  • C++的static關(guān)鍵字及變量存儲位置總結(jié)

    C++的static關(guān)鍵字及變量存儲位置總結(jié)

    今天看博文時,看到了c++的static關(guān)鍵字的一些總結(jié),還涉及到了一些代碼的存儲位置;接下來為您詳細(xì)呈現(xiàn)
    2012-11-11
  • C++ string格式化輸出方式

    C++ string格式化輸出方式

    今天小編就為大家分享一篇C++ string格式化輸出方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++中函數(shù)的用法小結(jié)

    C++中函數(shù)的用法小結(jié)

    這篇文章主要為大家分享下本人在閱讀《C++ Primer》函數(shù)一章時的讀書總結(jié),需要的朋友可以參考下
    2014-02-02
  • 實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景

    實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景

    這篇文章主要介紹了實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景,文章最后的適用性部分則介紹了一些State模式善于處理的情況,需要的朋友可以參考下
    2016-03-03
  • 打印菱形以及斐波納契數(shù)列的幾種解法介紹

    打印菱形以及斐波納契數(shù)列的幾種解法介紹

    本篇文章是對打印菱形及斐波納契數(shù)列的幾種解法進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C++類與對象的詳細(xì)說明

    C++類與對象的詳細(xì)說明

    這篇文章主要為大家詳細(xì)介紹了C++的類與對象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 深度解析C語言中數(shù)據(jù)的存儲

    深度解析C語言中數(shù)據(jù)的存儲

    本文詳細(xì)介紹了C語言中數(shù)據(jù)的存儲,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • new和malloc的區(qū)別深入解析

    new和malloc的區(qū)別深入解析

    以下是分別是對new和malloc的區(qū)別進行了詳細(xì)的分析及介紹,需要的朋友可以過來參考下
    2013-09-09
  • C語言*與&在操作線性表的作用詳解

    C語言*與&在操作線性表的作用詳解

    本文主要介紹了C語言*與&在操作線性表的作用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

中方县| 南丹县| 滨海县| 镶黄旗| 大埔县| 健康| 勃利县| 原阳县| 加查县| 蓝田县| 鄂尔多斯市| 五大连池市| 金门县| 隆尧县| 禹城市| 宁波市| 新营市| 广东省| 乌什县| 沾化县| 喀什市| 肇源县| 兴义市| 盘山县| 咸宁市| 南安市| 桃园市| 淮阳县| 博罗县| 阳春市| 越西县| 思茅市| 陵水| 乳源| 河间市| 房产| 巴南区| 离岛区| 道真| 海淀区| 庆城县|