Effective_STL 學習筆記(三十九) 用純函數做判斷式
1. 判斷式是返回 bool (或者其他隱式轉換為 bool 的東西)。判斷式在 STL 中廣泛使用。標準關聯容器的比較函數是判斷式,判斷式函數常常作為參數傳給算法,比如 find_if 和多種排序算法。
2. 純函數是返回值只依賴於參數的函數。如果 f 是一個純函數, x 和 y 是對象, f(x, y)的返回值僅當 x 或 y 的值改變的時候才會改變。
3. 一個判斷式類是一個仿函數類,它的 operator() 函數是一個判斷式,也就是,它的 operator 返回 true 或 false,任何 STL 想要一個判斷式的地方,都會接受一個真的判斷式或一個判斷式類。
不管怎麽寫你的判斷式,它們都應該是純函數
Effective_STL 學習筆記(三十九) 用純函數做判斷式
相關推薦
Effective_STL 學習筆記(三十九) 用純函數做判斷式
函數類 effect false 函數 轉換 bsp 對象 stl 排序 1. 判斷式是返回 bool (或者其他隱式轉換為 bool 的東西)。判斷式在 STL 中廣泛使用。標準關聯容器的比較函數是判斷式,判斷式函數常常作為參數傳給算法,比如 find_if 和多種排
Effective_STL 學習筆記(四十六) 考慮使用函數對象代替函數做算法的參數
color 函數 ive leg 假設 指針 學習 編譯器 內聯 STL 函數對象——化妝成函數的對象——傳遞給算法所產生的代碼比一般傳遞真的函數高效 假設需要以降序排序一個 double 的 vector,最直接的 STL 方式是通過 sort 算法和 greater
Effective_STL 學習筆記(二十九) 需要一個一個字元輸入時考慮使用 istreambuf_iterator
使用 istreambuf_iterator : 1 ifstream inputFile( "interestingData.txt" ); 2 string fileData( (ifstreambuf_iterator<char>(inputFile)), i
Effective_STL 學習筆記(三十一) 瞭解你的排序選擇
排序出 20 個質量最高的 Widget,一種演算法叫作 partial_sort: 1 bool qualityCompare( const Widget & lhs, const Widget & rhs ) 2 { 3 // 返回 lhs 的質量是
Effective_STL 學習筆記(三十五) 通過 mismatch 和 lexicographical 比較實現簡單的忽略大小寫字串比較
怎麼用 STL 進行忽略大小寫的字串的比較? 首先實現兩個字元忽略大小寫的比較: 1 int ciCharCompare( char c1, char c2 ) // 忽略大小寫比較字元 2 { 3 int Ic1 = tolower(
Effective_STL 學習筆記(三十六) 了解 copy_if 的正確 實現
了解 算法 十六 ota eve nbsp remove rep ack STL 提供了 11 個名字帶有 “copy” 的算法 copy copy_backward replace_copy reverse_copy re
Effective_STL 學習筆記(二十七) 用 distance 和 advance 把 const_iterator 轉化成 iterator
並不存在從 const_iterator 到 iterator 之間的隱式轉換 一種安全的、可移植的方法獲取他所對應的 iterator: 1 typedef deque<int> IntDeque; // 方便的typedef 2 typedef Int
Linux學習筆記(二十九)日常運維一
日常運維一、查看系統負載w/uptime 查看系統負載 load average後指系統在一分鐘,五分鐘,十五分鐘內的運行狀態,平均有多少服務在運行負載值大於邏輯cpu數就說明超負荷了,數值小於cpu數是理想狀態 cat /proc/cpuinfo 查看cpu核數processor 後的數字就是cpu數量減一
Linux學習筆記(三十一)日常運維三
ifconfig一、linux網絡相關、 ifconfig ifconfig //查看網卡ip(yum install net-tools) ifup ens33/ifdown ens33 //開啟網卡,關閉網卡,只有一個網卡時,一旦關閉了網卡就會斷開遠程鏈接,只能去服務器主機重新打
Linux學習筆記(三十二)iptables filter表案例、 iptables nat表應用
iptables filter表案例、 iptables nat表應用 一、iptables filter表案例需求:將80、20、21端口放行,對22端口指定特定的ip才放行以下為操作方法:vim /usr/local/sbin/iptables.sh //加入如下內容#! /bin/bas
Linux學習總結(三十九)lnmp環境搭建1-mysql,php 安裝
lnmp mysql php php-fpm 之前我們介紹過lamp,lnmp和lamp相比就是把apache換為了nginx,nginx也是目前比較流行的一款web server,在處理高並發請求上,性能要遠勝於apache。apache將php作為一個自己的一個擴展模塊來使用,nginx則
Effective_STL 學習筆記(二十一) 永遠讓比較函式對相等的值返回 false
除非比較函式總是為相等的值返回 false,否則將會打破所有的標準關聯容器, 不管關聯容器是否允許存在副本(set、map、multiset、multimap) 對於(set、map)使用 less_equal (<=): 1 !( 10A <= 10B ) &a
Effective_STL 學習筆記(二十二) 避免原地修改 set 和 multiset 的健
情況下 刪除元素 一份 pre rpo cast set、map class color 正如所有標準關聯容器,set 和 multiset 保持它們的元素有序,容器的正確行為依賴於它們保持有序,如果改變一個元素的值,新值不在正確的位置,將破壞容器的有序性。 對於
Effective_STL 學習筆記(二十六) 儘量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator
每個標準容器類都提供四種迭代器型別,對於container<T>而言: 1 iterator // 的作用相當於T*, 2 const_iterator // 相當於 const T*(也可 T const*) 3
Effective_STL 學習筆記(二十八) 瞭解如何通過 reverse_iterator 的 base 得到 iterator
要實現在一個 reverse_iterator ri 指出的位置上插入新元素,在 ri.base() 指向的位置插入就行了。對於 insert 操作而言,ri 和 ri.base() 是等價的,而且 ri.base() 真的是 ri 真的是 ri 對應的iterator 1 vec
Effective_STL 學習筆記(四十五) 注意 count、find、binary_search、lower_bound、upper_bound 和 equal_range 的區別
如果區間有序,可以使用對數時間的演算法,binary_search、lower_bound、upper_bound 和 equal_range 如果迭代器沒有劃分一個有序區間,只能用線性時間的演算法 count、count_if、find 和 find_if &nb
Effective_STL 學習筆記(四十七) 避免產生只寫程式碼
假設有一個 vector<int>,想要去掉 vector 中的值小於 x 而出現在至少和 y 一樣大的最後一個元素之後的所有元素 1 vector<int> v; 2 int x, y; 3 . . . 4 v.erase( remove_if
Effective_STL 學習筆記(四十七) 避免產生只寫代碼
有一個 find tor ive type 使用 rbegin pan begin 假設有一個 vector<int>,想要去掉 vector 中的值小於 x 而出現在至少和 y 一樣大的最後一個元素之後的所有元素 1 vector<int>
Django學習筆記(三十二):datetime.timedelta類介紹
datetime.timedelta物件代表兩個時間之間的時間差,兩個date或datetime物件相減就可以返回一個timedelta物件。 如果有人問你昨天是幾號,這個很容易就回答出來了。但是如果問你200天前是幾號,就不是那麼容易答出來。而在Python中dateti
Django學習筆記(三十一):django orm extra
extra 在django orm中使用複雜的sql語句 extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些情況下,Django 的查