C Primer第五版 10 3 4節練習

2021-07-05 08:20:16 字數 4297 閱讀 5172

練習10.22:重寫統計長度小於等於6的單詞數量的程式,使用函式代替lambda

答:見練習10.22.cpp

練習10.23:bind接受幾個引數?

答:不一定,至少接受乙個引數繫結。詳見 p356 bind的引數一節

練習10.24:給定乙個string,使用bind和check_size在乙個int的vector中查詢第乙個大於string長度的值。

答:見 練習10.24.cpp

練習10.25:在10.3.2節(第349頁)的練習中,編寫了乙個使用partition的biggies版本。使用check_size和bind重寫此函式。

答:見 練習10.25.cpp

練習10.22

/*

*練習10.22

*2015/8/20

*問題描述:練習10.22:重寫統計長度小於等於6的單詞數量的程式,使用函式代替lambda。

*說明:對bind的使用

*/#include

#include

#include

#include

#include

using

namespace

std;

using

namespace

std::placeholders;

bool check_size(const

string &s, string::size_type sz)

int main()

; vector

::size_type sz = 6;

int cnt1 = count_if(words.begin(),words.end(),[sz](const

string &s)); //長度大於6的

cout

<< "total numbers of words is: "

<< cnt1 << endl;

auto check6 = bind(check_size,_1,sz);

int cnt = count_if(words.begin(), words.end(),check6);

cout

<< "total numbers of words is: "

<< cnt << endl;

return

0;}

練習10.24

/*

*練習10.24

*2015/8/20

*問題描述:練習10.24:給定乙個string,使用bind和check_size在乙個int的vector中查詢第乙個大於string長度的值。

*說明:對於bind的理解,以及和比較物件的理解,比較的物件是什麼型別,那麼佔位符就應該是哪個,check_size沒有變,變得是bind的佔位符

*/#include

#include

#include

#include

#include

using

namespace

std;

using

namespace

std::placeholders;

bool check_size(const

string &s,string::size_type sz)

int main()

; cout

<< "word is: "

<< word << " size is:"

<< word.size() << endl;

auto f=() ;

cout

<< "numbers : ";

f();

cout

<< endl;

auto check5 = bind(check_size,word,_1);

auto wc = find_if(words.begin(), words.end(),check5);

cout

<< "first number which is bigger than s.size() is:"

<< endl;

cout

<< *wc << endl;

return

0;}

練習10.25

/*

*練習10.25

*2015/8/20

*問題描述:練習10.25:在10.3.2節(第349頁)的練習中,編寫了乙個使用partition的biggies版本。使用check_size和bind重寫此函式。

*說明:學會用bind這一特性,在練習10.19基礎上修改

*//*

*練習10.19

*2015/8/18

*問題描述:練習10.19:用stable_partition重寫前一題的程式,與stable_sort類似,在劃分後的序列中維持原有元素的順序。

*說明:在練習10.18的基礎上改動,與原來程式不同的地方,stable_partition後,單詞順序和之前一致

*//*

*練習10.18

*2015/8/18

*問題描述:練習10.18:重寫biggies,用partition代替find_if。我們在10.3.1節練習10.13(第345頁)中介紹了partition演算法。

*說明:在練習10.16的基礎上改動

*//*

*練習10.16

*2015/8/18

*問題描述:練習10.16:使用lambda編寫你自己版本的biggies。

*/#include

#include

#include

#include

#include

using

namespace

std;

using

namespace

std::placeholders;

bool isshorter(const

string &s1, const

string &s2)

void elimdups(vector

words)

bool check_size(const

string &s, string::size_type sz)

string make_plural(size_t ctr, const

string &word, const

string &ending)

void biggies(vector

&words, vector

::size_type sz)

); //auto wc = find_if(words.begin(), words.end(),[sz](const string &a));

//auto wc = partition(words.begin(), words.end(),[sz](const string &a));//使用partition代替find_if函式

//auto wc = stable_partition(words.begin(), words.end(),[sz](const string &a));//使用stable_partition代替partition

auto check = bind(check_size,_1,sz);//2015/8/20改動 使用bind check_size

auto wc = stable_partition(words.begin(), words.end(),check);

auto count = words.end() - wc;

cout

<< count << " "

<< make_plural(count,"word", "s") << " of length "

<< sz << " or longer"

<< endl;

for_each(wc, words.end(),(const

string &s));

cout

<< endl;

}int main()

; vector

::size_type sz = 5;

biggies(words,sz);

return

0;}

C Primer第五版 2 4 3節練習

練習2.30 對於下面的這些語句,請說明物件被宣告成了頂層const還是底層const?const int v2 0 v2的值不能被改變,所以這是乙個頂層const int v1 v2 int p1 v1,r1 v1 const int p2 v2 p2存放的是v2的位址,不能間接改變v2的值,但p...

C Primer第五版 2 5 3節練習

練習 2.36 關於下面的 請指出乙個變數的型別以及程式結束時它們各自的值。include int main 練習 2.37 賦值是會產生引用的一類典型表示式,引用的型別就是左值的型別。也就是說,如果i是int,則表示式 i x的型別是int 根據這一特點,請指出下面的 中每乙個變數的型別和值。in...

C Primer第五版 3 2 2節練習

練習3.2 編寫一段程式從標準輸入中一次讀入一整行,然後修改該程式使其一次讀入乙個詞。練習3.3 請說明string類的輸入運算子和getline函式分別是如何處理空白字元的。練習 3.4 編寫一段程式讀入兩個字串,比較其是否相等並輸出結果。如果不相等,輸出較大的那個字串。改寫上述程式,比較輸入的兩...