按照不同引數數量和型別例項化出的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 ...