第十七章 標準庫特殊設施

2022-05-03 10:03:15 字數 2632 閱讀 3903

按照不同引數數量和型別例項化出的tuple是不同型別

若希望將一些資料組合成單一物件,可使用tuple。可將tuple看作乙個「快速而隨意」的資料結構

tuple型別及其伴隨型別和函式都在標頭檔案tuple中

tuple支援的操作見表17.1 

123

45

tuple threed;             //值初始化每個成員

tuple,int,list> someval("constants",,42,);

tuple threed=; //錯,接受初始值的建構函式是explicit,不可型別轉換

tuple threed; //對,可直接初始化

auto item=make_tuple("0-999-78345-x",3,20.00); //使用make_tuple來構造

若不知道乙個tuple的準確型別,可以用兩個輔助類模板來查詢tuple成員的數量和類別:

例子:訪問tuple的成員及其型別

123

4567

8910

auto item=make_tuple("0-999-78345-x",3,20.00);  //使用make_tuple構造乙個tuple

//訪問成員

auto book=get<0>(item); //取第乙個成員

auto cnt=get<1>(item);

auto price=get<2>(item)/cnt;

get<2>(item)*=0.8; //get取的成員是引用,可以修改tuple內部

//求tuple型別的詳細資訊

typedef decltype(item) trans; //定義型別別名

size_t sz=tuple_size::value; //從tuple的型別中得到成員的數量:tuple_size

tuple_element<1,trans>::type cnt=get<1>(item); //從tuple的型別中得到成員的型別:tuple_element

由於tuple有==和

例子:tuple的相等和關係算符

123

4567

tuple duo("1","2");

tuple twod(1,2);

bool b=(duo==twod); //錯,不能比較元素型別string和size_t

tuple threed(1,2,3);

b=(twod

tuple origin(0,0);

b=(origin

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

/* 背景:sales_data是一本書的銷售資料

* vector是一家書店所有書的銷售資料

* vector>是多家書店的所有書的銷售資料

* 任務:給定所有書店的所有書的銷售記錄,輸入一本書名,列印這本書在所有書店的銷售記錄

*///tuple表示一本書在一家書店的銷售記錄:第乙個引數代表第幾家書店,第二三個引數代表這本書在這家書店的迭代器範圍

using matches=tuple::size_type,

vector::const_iterator,

vector::const_iterator>;

//返回tuple的vector,即這本書在所有書店的銷售記錄

//引數是所有書店所有書的銷售記錄files和要查詢的書名book

vector findbook(const vector> &files,const string &book)

return ret;

}//呼叫上面的函式,列印結果

void reportresults(istream &in,ostream &os,const vector> &files)

//將auto擴充套件為const auto &,宣告的是這個型別的常量引用

for(const auto &store:trans)

//使用get(tuple)來取tuple的成員

os//能用accumulate是因為對salse_data過載了operator+,求和起點是臨時構建的物件

<

十七 標準庫特殊設施

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

第十七章 Size Classes

通常,您希望應用程式的介面根據螢幕的尺寸和方向而顯示不同的布局。在本章中,您將修改homepwner中的detailviewcontroller的介面,以便當它出現在具有相對較小高度的螢幕上時,文字字段集合和影象檢視併排而不是堆疊在一起 圖17.1 圖17.1 homepwner 的 detailv...

第十七章 部署

總的來說,部署遇到了許多坑,而且還有好多坑還沒有踩。去cocode找了許多教程,才踩了一些坑,但是關於資料庫的坑,先留著。所有的db.session.add 後面都加上db.session.commit 才行。記得,這是狗書的問題!部署教程 每次修改後需要一下命令重新部署下 git add git ...