您好,登錄后才能下訂單哦!
C++中如何使用函數對象,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
適合對屬于基本數據類型的對象排序,它使用<作為排序比較規則,第2種語法則是根據指定排序規則comp來進行排序,其中comp參數就是一個函數對象。如果要排序的對象不是如int,float等簡單類型或不想使用<作為排序規則的話就得使用第2種語法。
指定一個函數對象來作為排序規則(函數對象)進行排序,那函數對象究竟是什么了,其實簡單地說它就是一些使用起來像調用函數一樣的對象,如:一般的函數,函數指針,或重載了()運算符的類的實例等,使用這些對象的方式好像調用函數一樣所以稱這些對象為C++函數對象,如下就是函數對象定義:
void print(int x) { if(x>=0&&x<=100) cout<<x<<” ”; } //函數對象指針 typedef void(*ptPrint)(int x); ptPrint prt=print; //一個重載了()運算符得類 class isOk { public: bool operator () (int val) { if(val<0||val>100) { return false; } return true; } };
有了上面得定義后,我們就可以以函數調用的形式使用上面的函數對象了,如: for_each(vectorA.begin(),vectorA.end(),print)打印大于等于0小于等于100的數, transform(vectorA.begin(),vectorA.end(),vectorB.begin(),isOk())判斷向量vectorA中值x的范圍是否在0之100之間。
如果在則向量vectorB對應的值為真,否則為假,其中vectorB中的數據類型為bool。在實際中往往會根據調用函數對象時參數的多少將函數對象分為三種形式,,無參函數對象,一元函數對象和二元函數對象,剛才的C++函數對象就是一個無參函數對象。無參函數對象與一元,二元函數對象有很大的區別,一元,二元函數對象的定義需要繼承以下函數原型:
class Grade { public: Grade(int id,string name,int score) { ID=id; Name=name; Score=score; } int ID; string Name; int Score; };
看完上述內容,你們掌握C++中如何使用函數對象的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。