c++ PRimer Plus(習(xí)題18.1)
//與c類似的初始化列表功能//簡單的函數(shù)題目,這本書的最后一張其實(shí)可以不用做了//不太好做#include<iostream>#include<initializer_list> //C++11新標(biāo)準(zhǔn)template<class T> //or typenameT average_list(std::initializer_list<T>r); //一個返回改類型平均值的函數(shù)int main(){ using namespace std; auto q = average_list(initializer_list<double>{ 15.4,10.7,9.0 }); cout << q << endl; //11.7 cout << average_list(initializer_list<int>{ 20,30,19,17,45,38 })<<endl; //28.16 auto ad = average_list<double>({ 'A',70,63.33 }); //這里書上說是強(qiáng)制初始化列表類型為double,具體的用法應(yīng)該是initializer_list的特性 cout << ad << endl; cout << "Cheak it,sir!/n"; return 0;}template<class T> //or typenameT average_list(std::initializer_list<T>r){ T tot=0; //出現(xiàn)top為 int i = 0; for (auto p = r.begin(); p != r.end(); p++,i++) tot += *p; return tot / i;}c++ Primer Plus(習(xí)題18.2)//一個簡單的類設(shè)計,要求使用移動構(gòu)造函數(shù)和移動復(fù)制運(yùn)算符//移動寓意和右值的引用有關(guān),這是一種更高效的數(shù)據(jù)復(fù)制方法,在某些情況下//第一次運(yùn)行出現(xiàn)停止運(yùn)行,訪問權(quán)限出了問題,大意啊,指針竟然沒用new來分配內(nèi)存#include<iostream>#include"cpmv.h"int main(){ using namespace std; //大括號為了看見析構(gòu)函數(shù) { Cpmv one("C","++"); Cpmv two = one + one; //呼叫移動右值引用,還有重載的+號 cout << "object one: /n"; one.Display(); cout << "object two: /n"; two.Display(); Cpmv three, four; cout << "three=one/n"; three = one; //呼叫賦值預(yù)算符 cout << "now object three is: "; three.Display(); cout << "four=one+two/n"; //產(chǎn)生右值了,呼叫移動賦值運(yùn)算符 four = one + two; four.Display(); cout << "Test complete!/n"; } return 0;}c++ Primer Plus(習(xí)題18.3)//c++新標(biāo)準(zhǔn),可變參數(shù)模板,c語言也有//看了大神做的,簡單粗暴#include<iostream>long double sum_value() { return 0; } //遞歸的終止條件template<typename T,typename...Args>long double sum_value(T value, Args...args);int main(){ using namespace std; cout << sum_value(100, 200, 300)<< endl; cout << sum_value(10.2, 31.5, 21, 4, 21.5, 36.8) << endl; return 0;}template<typename T, typename...Args>long double sum_value(T value, Args...args){ long double result; //沒理解遞歸的精髓和參數(shù)包的展開,記得這里傻傻的初始化為0 result=sum_value(args...); //這個也想了一會兒,有點(diǎn)難度,對于我這種小菜鳥來說 //展開包,使用遞歸 result += value; return result; //附上高手的簡潔代碼 return (long double)(t)+(long double)sum_value(args...); }c++ Primer Plus(習(xí)題18.4)//你會很詫異,為什么沒有解答了,這一題,因?yàn)檎也坏侥莻€老師要改的題目//說是16.5程序清單,可是那時什么鬼,所以,不解釋了完結(jié)了,可能只是一個開始罷了,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
新聞熱點(diǎn)
疑難解答
圖片精選