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之間(包含)均勻分布的隨機數乙個給定的隨機數發生器一直會生成相同的隨機數序列,為了生成與之前不同的序列,可以將引擎和分布物件定義為static的uniform_int_distributionu(0,9);
default_random_engine engine; //生成無符號隨機整數
for(int i = 0;i < 10;i++)
static uniform_int_distributionu(0,9);但這種方法僅適用於區域性的隨機數發生器,另一種方法是呼叫系統時間函式time來作為發生器種子,這也是c中rand函式常使用的方法。宣告如下:static default_random_engine engine;
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...