c++ primer第五版(中文)習題答案 第十章第五節第二三小節-算法形參合命名規範

本博客知識記錄自己學習中的筆記或者記錄,如果有錯誤歡迎大家糾正。
本節主要學習算法形參模式和算法命名規範

alg(beg,end,other args);
alg(beg,end,dest,other args);
alg(beg,end,beg2,oher args);
alg(beg,end,beg2,end2,other args);

alg 算法名稱, beg 和end表示算法所操作的範圍,幾乎所有的算法都接受一個輸入範圍,oher args表示算法還接受一些額外的參數,beg2,end2是第二範圍 ,dest是目標迭代器,。

一些算法使用重載形式傳遞一個謂詞
unique (beg,end) //使用==運算符比較元素
unique(beg,end,comp) 使用comp比較元素

_if版本算法
find(beg,end,val) //查找輸入範圍中var第一次出現的位置
find_if(beg,end,pred);//查找第一個令pred爲真的值

區分拷貝元素的版本和不拷貝元素的版本
reverse(beg,end)//反轉輸入範圍中的元素的順序
reverse_copy(beg,end,dest)//將元素按逆序拷貝到dest中

一些算法同事提供_copy_if 版本
//從v1中刪除奇數元素
remove_if(v1.begin(),v1.end(),[](int i){return i%2;});

//將偶數元素v1拷貝到v2;v1不變
remove_copy_if(v1.begin(),v1.end(),back_inserter(v2),[](int i){return i%2;});

習題練習
10.41 根據算法和參數名稱,描述下面每個標準庫算法執行什麼操作

replace(beg,end,old_val,new_val)
替換[beg,end)範圍內所有的old_val爲new_val;

replace(beg,end,pred,new_val)
替換[beg,end)範圍內所有的pred爲真的值爲new_val;

replace_copy(beg,end,dest,old_val,new_val)
替換[beg,end)範圍內所有的old_val值爲new_val並copy到dest中,原來的不變;

replace_copy_if(beg,end,dest,pred,new_val);
替換[beg,end)範圍內所有的pred值爲真爲new_val並copy到dest中,原來的不變;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章