// chapter-17.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)葵擎。
//
#include "stdafx.h"
#include<iostream>
#include<tuple>
#include<vector>
#include<string>
#include<bitset>
#include<regex>
#include<random>
#include<ctime>
#include<cmath>
using namespace std;
using namespace std::regex_constants; //regex的匹配標(biāo)志命名空間
vector<unsigned> good_value()
{
static default_random_engine e;
static uniform_int_distribution<unsigned> u(0, 9);
vector<unsigned> ret;
for (size_t i = 0; i < 10; ++i)
{
ret.push_back(u(e));
}
return ret;
}
int main()
{
//tuple是一個(gè)快速而隨意的數(shù)據(jù)結(jié)構(gòu)况脆,其構(gòu)造函數(shù)為explicit!實(shí)參和返回值都是字面值常量!
tuple<size_t, size_t, size_t> threeD;
tuple<string, vector<int>> someVal("aaa", { 1,2,3 });
auto item = make_tuple("00123", 3,150.0);
//訪問(wèn)成員,通過(guò)get<>()函數(shù)訪問(wèn)成員!
auto book = get<0>(item);
auto cnt = get<1>(item);
get<2>(item) *= 0.8;
//查詢tuple的類型
using trans=decltype(item);
size_t sz = tuple_size<trans>::value; //成員數(shù)量
tuple_element<1, trans>::type element_1 = get<1>(item); //獲取對(duì)應(yīng)成員的類型误阻!
//tuple進(jìn)行關(guān)系和相等比較時(shí)碉输,必須成員數(shù)量相同边翼,且每隊(duì)成員可以使用==運(yùn)算符或者<運(yùn)算符齐遵!
tuple<string, string> compare_one("a", "b");
tuple<string, string> compare_two("a", "c");
if (compare_one < compare_two)
cout << "One < Two!" << endl;
//tuple常用于函數(shù)返回多值否淤!返回索引和首尾迭代器酪刀!
//bitset刮萌,具有固定大小傻粘,且不能改變克饶!
bitset<32> bitvec(1u); //構(gòu)造函數(shù)為constexpr琅锻,參數(shù)必須是字面值類型卦停!
//初始化方法
//bitset<n> b
//bitset<n> b(u) //b為unsigned long long值u的低n位拷貝,如果超出則高位置0恼蓬!
//bitset<n> b(s,pos,m,zero,one) //b是從string的pos開(kāi)始的m個(gè)字符的拷貝惊完,string只能包含zero和one!
//bitset<n> b(cp,pos,m,zero,one)
bitset<13> bitval1(0xbeef); //1111011101111 高位被丟棄
bitset<20> bitval2(0xbeef); //0000101 1111011101111 高位補(bǔ)0
string str("1111111000000011001101");
bitset<5> bitval3(str, 5, 4); //01100
bitset<5> bitval4("1100"); //01100
cout << bitval1 << " " << bitval2 << " " << bitval3 << " " << bitval4 << endl;
//bitset的操作
//b.any() b中是否存在置位的二進(jìn)制,返回bool
//b.all() b中所有都置位了嗎处硬?
//b.none() b中不存在置位的二進(jìn)制
//b.cout() b中置位的位數(shù)小槐,返回size_t
//b.size() 一個(gè)constexpr函數(shù),返回?凿跳?件豌??控嗜?
//b.test(pos) 若pos置位則返回true
//b.set(pos,v) 將pos的位設(shè)置為bool值v茧彤,若無(wú)實(shí)參則將b中所有位置位
//b.set()
//b.reset(pos) 復(fù)位
//b.reset()
//b.flip(pos) 改變pos處的位狀態(tài)
//b.flip()
//b[pos] 訪問(wèn)b中pos處的位!
//b.to_long()
//b.to_ullong()
//b.to_string(zero,one) zero和one的默認(rèn)值分別為0和1疆栏,用來(lái)表示b中的0和1曾掂!
//os<<b 將b中二進(jìn)制位打印承边!
//is>>b
//正則表達(dá)式
//regex 正則表達(dá)式的類
//regex_match 將字符序列與正則表達(dá)式匹配
//regex_search 尋找第一個(gè)與正則表達(dá)式匹配的序列
//regex_replace 使用給定格式替換一個(gè)正則表達(dá)式
//sregex_iterator 迭代器遭殉,調(diào)用regex_search來(lái)遍歷一個(gè)string
//smatch 容器類,保存在string中的搜索結(jié)果.(cmatch,保存const char*的結(jié)果)
//ssub_match string中匹配的子表達(dá)式的結(jié)果
//regex_search和regex_match的參數(shù)博助,返回bool。指出是否找到匹配
//(seq,m,r,mft) seq可以為string或者一對(duì)迭代器或者指向空字符結(jié)尾的字符串痹愚,m為一個(gè)match對(duì)象富岳,保存匹配結(jié)果;r為正則表達(dá)式拯腮;mft是一個(gè)可選的值窖式,影響匹配過(guò)程!
//(seq,r,mft)
string pattern("[^c]ei");
pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
regex r(pattern);
smatch results;
string test_str = "receipt freind theif receive";
if (regex_search(test_str, results, r))
cout << results.str() << endl;
//regex的操作
//regex r(re) re可以使string动壤、字符范圍迭代器萝喘、指向空字符結(jié)尾的字符數(shù)組、字符指針和計(jì)數(shù)器等等琼懊;
//regex r(re,f) f指出對(duì)象如何被處理阁簸,默認(rèn)值為ECMAScript
//r1=re 正則表達(dá)式拷貝,re可以為正則表達(dá)式或者string哼丈!
//r1.assign(re,f) 同上
//r.mark_count() r中子表達(dá)式的數(shù)目
//r.flags() 返回r的標(biāo)志集
//icase 匹配時(shí)忽略大小寫 nosubs不保存匹配的子表達(dá)式 optimize執(zhí)行速度優(yōu)先于構(gòu)造速度 ECMAScript指定語(yǔ)法 basie extended awk grep egrep
regex r_cpp("([[:alnum:]]+)\\.(cpp|cxx|cc)$", regex::icase); //一個(gè)或多個(gè)字母或數(shù)字后接一個(gè).启妹,再接一個(gè)cpp或cxx或cc。
//正則表達(dá)式在regex對(duì)象初始化時(shí)檢查錯(cuò)誤醉旦,標(biāo)準(zhǔn)庫(kù)定義了regex_error的異常類饶米,含有what和code成員函數(shù)!
//使用正則表達(dá)式時(shí)车胡,應(yīng)該避免多次構(gòu)造regex對(duì)象和regex賦值檬输,特別應(yīng)該在循環(huán)外創(chuàng)建regex對(duì)象!
//正則表達(dá)式輸入類型和輸出類型應(yīng)該一致匈棘;string--regex--smatch--ssub_match--sregex_iterator//const char*--regex--cmatch--csub_match--cregex--iterator
//Regex的迭代器丧慈,包含*it、it->羹饰、++it伊滋、it++碳却、it1==it2、it1笑旺!=it2操作昼浦!
for (sregex_iterator it(test_str.begin(), test_str.end(), r), end_it; it != end_it; ++it) //test_str為要查找的string字符串!end_it為尾后迭代器筒主!
{
cout << it->str() << endl;
}
//smatch對(duì)象包含的操作
//m.ready() 匹配成功返回true
//m.size() 返回最近一次匹配的正則表達(dá)式中子表達(dá)式的數(shù)目
//m.empty() 若m.size()為0关噪,則返回true
//m.perfix()
//m.suffix()
//m.format()
//m.length(n) 子表達(dá)式序列索引!
//m.position(n)
//m.str(n)
//m[n]
//m.begin(),m.end()
for (sregex_iterator it(test_str.begin(), test_str.end(), r), end_it; it != end_it; ++it) //test_str為要查找的string字符串乌妙!end_it為尾后迭代器使兔!
{
cout << it->prefix().str() << "=" << it->str() << "=" << it->suffix().str() << endl; // it->prefix().str() it->str() it->suffix().str() smatch對(duì)象!prefix返回一個(gè)ssub_match對(duì)象藤韵!
}
//regex r_cpp("([[:alnum:]]+)\\.(cpp|cxx|cc)$", regex::icase);正則表達(dá)式虐沥,包含2個(gè)子表達(dá)式,通過(guò)括號(hào)進(jìn)行分組泽艘!
string filename = "foo.cpp";
smatch result_cpp;
if (regex_search(filename, result_cpp, r_cpp))
cout << result_cpp.str(0) << "http://" << result_cpp.str(1) << "http://" << result_cpp.str(2) << endl;
//ssub_match子匹配操作欲险,子表達(dá)式常用于驗(yàn)證數(shù)據(jù)!
//matched 指出ssub_match是否匹配了
//first 返回首尾迭代器
//second
//length() 返回匹配的子表達(dá)式的長(zhǎng)度
//str() 返回對(duì)應(yīng)string
//s=ssub 將ssub轉(zhuǎn)為string對(duì)象匹涮!
//正則表達(dá)式替換操作regex_replace
//m.format(dest,fmt,mft) 使用格式字符串fmt生成格式化輸出天试;dest表示迭代器
//m.format(fmt,mft) mft為匹配標(biāo)志!
//regex_replace(dest,seq,r,fmt,mft)~dest表示什么然低?
//regex_replace(seq,r,fmt,mft)
string info = "aaa (201) 555-2368 862-555-0123 (973)555.0130 2015550175";
string phone = "(\\()?(\\d{3})(\\))?([-. ])?(\\d{3})([-. ])?(\\d{4})";
regex r_phone(phone);
smatch m_p;
string fmt = "$2.$5.$7"; //輸出第2喜每、5、7子序列雳攘!
string fmt2 = "$2.$5.$7 \\ ";
cout << regex_replace(info, r_phone, fmt) << endl;
cout << regex_replace(info, r_phone, fmt2,format_no_copy) << endl;//format_no_copy表示不輸出序列中未匹配的部分带兜!
//隨機(jī)數(shù),頭文件random来农。引擎類鞋真,生成隨機(jī)unsigned整數(shù)序列;分布類型沃于,使用引擎返回服從特定概率分布的隨機(jī)數(shù)
default_random_engine e; //標(biāo)準(zhǔn)庫(kù)定義了多個(gè)隨機(jī)數(shù)引擎類型涩咖!
for (size_t i = 0; i < 10; ++i)
{
cout << e() << " ";
}
cout << endl;
//隨機(jī)數(shù)引擎的操作
//Engine e; 創(chuàng)建該引擎類型的對(duì)象
//Engine e(s); 使用整數(shù)值s作為種子
//e.seed(s) 使用種子s重置引擎狀態(tài)
//e.min() 此引擎可生成的最大最小值
//e.max()
//Engine::result_type 此引擎生成的類型
//e.discard(u) 將引擎推進(jìn)u步,u為unsigned long long
//引擎和均布的組合==隨機(jī)數(shù)發(fā)生器
uniform_int_distribution<unsigned> u(0, 9); //均勻分布unsigned值
default_random_engine e2;
for (size_t i = 0; i < 10; ++i)
{
cout << u(e2) << " " ;
}
cout << endl;
//一個(gè)給定的隨機(jī)數(shù)發(fā)生器會(huì)生器會(huì)一直生成相同隨機(jī)數(shù)序列繁莹。解決:1檩互、聲明static;2咨演、使用隨機(jī)數(shù)種子time(0)
auto r1 = good_value();
auto r2 = good_value();
if (r1 != r2)
cout << "R1 != R2" << endl;
default_random_engine e3(time(0)); //time以秒計(jì)時(shí)闸昨,適用于生成種子時(shí)間間隔大于秒級(jí)!
//生成隨機(jī)實(shí)數(shù)
uniform_real_distribution<double> rd(0, 1);
for (size_t i = 0; i < 10; ++i)
{
cout << rd(e3) << " ";
}
//生成非均勻分布的隨機(jī)數(shù),以正態(tài)分布為例
normal_distribution<> n(4, 1.5);
vector<unsigned> vals(9);
for (size_t i = 0; i != 200; ++i)
{
unsigned v = lround(n(e)); //lround四舍五入到最接近的整數(shù)饵较!拍嵌,統(tǒng)計(jì)0~8的個(gè)數(shù)!
if (v < vals.size())
++vals[v];
}
for (size_t j = 0; j != vals.size(); ++j)
{
cout << j << ": " << string(vals[j], '*') << endl;
}
//生成bool值
bernoulli_distribution bb(0.8); //增加true的勝率循诉!0.8横辆!
bool b_one = bb(e3);
if (b_one)
cout << "One!" << endl;
//IO未看!
system("pause");
return 0;
}
chapter-17
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門比默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筋蓖,“玉大人,你說(shuō)我怎么就攤上這事退敦。” “怎么了蚣抗?”我有些...
- 文/不壞的土叔 我叫張陵侈百,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我翰铡,道長(zhǎng)钝域,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任锭魔,我火速辦了婚禮例证,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迷捧。我一直安慰自己织咧,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布漠秋。 她就那樣靜靜地躺著笙蒙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庆锦。 梳的紋絲不亂的頭發(fā)上捅位,一...
- 那天,我揣著相機(jī)與錄音,去河邊找鬼艇搀。 笑死尿扯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焰雕。 我是一名探鬼主播衷笋,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淀散!你這毒婦竟也來(lái)了右莱?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤档插,失蹤者是張志新(化名)和其女友劉穎慢蜓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體郭膛,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡晨抡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了则剃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘柱。...
- 正文 年R本政府宣布士袄,位于F島的核電站,受9級(jí)特大地震影響谎僻,放射性物質(zhì)發(fā)生泄漏娄柳。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一艘绍、第九天 我趴在偏房一處隱蔽的房頂上張望赤拒。 院中可真熱鬧,春花似錦诱鞠、人聲如沸挎挖。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肋乍。三九已至,卻和暖如春敷存,著一層夾襖步出監(jiān)牢的瞬間墓造,已是汗流浹背堪伍。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛉拙,于是被迫代替她去往敵國(guó)和親尸闸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 這章講了李陽(yáng)瘋狂英語(yǔ)以及家暴對(duì)他及事業(yè)的一些傷害孕锄。 with earphones slung stylishly ...
- Part 1 1. pigskin 2. column 3. graceful Part 2 關(guān)于體育新聞寫作吮廉,一...
- 【日本】高畑勛 著 高更①那幅《海邊的布列塔尼少女》,我每次到上野的國(guó)立西洋美術(shù)館去畸肆,都會(huì)想:只看看這幅畫就走吧宦芦。...
- 第二天一早,顧少傾便騎車回家了轴脐,整個(gè)人都有些魂不守舍的调卑,也只能強(qiáng)迫自己不再去想那些。 “咦大咱,媽恬涧,這是什么?”顧少傾...
- 隨感 回憶的帷幕徐徐拉開(kāi)碴巾,哈桑為了保護(hù)老宅子而受到塔利班的迫害溯捆,而哈桑唯一的兒子也成了孤兒,阿米爾很傷心厦瓢,但即便如...