C 相關 部分標準庫特殊設施

2022-03-22 05:18:00 字數 2528 閱讀 4056

tuple是c++11新標準裡的型別。它是乙個類似pair型別的模板。pair型別是每個成員變數各自可以是任意型別,但是只能有倆個成員,而tuple與pair不同的是它可以有任意數量的成員。但是每個確定的tuple型別的成員數目是固定的。

宣告如下

tupletp(1,2,6.2);
取值

cout << get<0>(tp) << endl; //輸出1

cout << get<1>(tp) << endl; //輸出2

cout << get<2>(tp) << endl; //輸出6.2

操作說明

make_tuple(v1,v2,v3,v4…vn)

返回乙個給定初始值初始化的tuple,型別從初始值推斷

t1 == t2

當倆個tuple具有相同數量的成員且成員對應相等時

t1 != t2

與上乙個相反

get(t)

返回t的第i個資料成員

tuple_size::value

給定型別的tuple中成員的數量

定義在標頭檔案random中的隨機數庫通過一組協作的類來解決這些問題:隨機數引擎類和隨機數分布類。

預設隨機數引擎default_random_engine,基本使用如下:

default_random_engine e;

cout << "預設範圍:" << e.min() <

for(int i = 0;i < 10;++i)

基本操作

engine e;                 //預設建構函式並使用預設種子

engine e(s); //使用整型值s作為種子

e.seed(s); //使用種子s重置引擎的狀態

e.min(); //引擎生成的值的範圍

e.max();

engine::result_type //此引擎生成的unsigned整型型別

e.discard(u); //將引擎推進u步;u的型別為unsigned long long

為了得到乙個指定範圍內的數,我們需要將分布物件和引擎物件組合使用,這種組合又稱為隨機數發生器。

//生成0到9之間(包含)均勻分布的隨機數

uniform_int_distributionu(0,9);

default_random_engine engine; //生成無符號隨機整數

for(int i = 0;i < 10;i++)

乙個給定的隨機數發生器一直會生成相同的隨機數序列,為了生成與之前不同的序列,可以將引擎和分布物件定義為static的

static uniform_int_distributionu(0,9);

static default_random_engine engine;

但這種方法僅適用於區域性的隨機數發生器,另一種方法是呼叫系統時間函式time來作為發生器種子,這也是c中rand函式常使用的方法。宣告如下:

default_random_engine el(time(0));
time返回從特定時刻到當前經過了多少秒,它接受單個指標引數,指向用於寫入時間的資料結構,如果為空則直接返回時間。

但是time返回以秒計的時間,因此這種方法僅適用於生成種子的間隔為秒級或者更長的應用,如果程式的自動過程反覆執行的頻率過高,則可能多次使用的都是相同的種子。

在c中,從rand獲得乙個隨機浮點數的常用方法是用rand()的結果除以rand_max,但這種方法並不正確,原因是隨機整數的精度通常低於隨機浮點數,這樣一些浮點數永遠不會生成。

在c++中,可以使用uniform_real_distribution類來處理從隨機整數到隨機浮點數的對映。**如下

default_random_engine e;

uniform_real_distributionu(0,1);

for(int i = 0;i < 10;i++)

輸出如下:

標準庫提供了20餘種分布型別,具體可參考c++ random 。

這裡以伯努利分布為例,以下**模擬了乙個遊戲中決定玩家和電腦誰先行動的情景,不停輸入y可以看到隨機生成兩種結果的一種——電腦先走或者玩家先走。

string resp;

default_random_engine e; //e應保持狀態,所以必須在迴圈外定義

bernoulli_distribution b; //預設對半的機會

dowhile(cin >> resp && resp[i] == 'y')

如果想給玩家一點作弊的小後門,可以調整先行一方的概率

bernoulli_distribution b(.45); //減少程式先行的概率
這樣分布情況就為(0.45/0.55) 

伯努利分布

標準庫特殊設施

一 tuple型別 1 定義和初始化tuple 類似pair,每個pair都恰好有兩個成員,tuple可以有任意數量的成員 tuplet 值初始化 tuplet1 1,2,3 初始值初始化 auto t make tuple 1,2,3 類似make pair函式 get 0 t get標準庫函式訪...

十七 標準庫特殊設施

tuple,當我們希望將一些資料組合成單一物件,但又不想麻煩的定義乙個新資料結構來表示這些資料時,使用tuple,簡易struct?tuplethree 是explicit,所以不能使用 auto item make tuple 1,abc 5.0 成員是未命名的,所以需要使用get標準庫函式模板 ...

17 c 標準庫特殊設施

include include include include include include using namespace std void tupletest void bitsettest void regextest void randomtest void iotest int main...