adapter:將乙個class的介面轉換為另乙個class的介面。
應用於仿函式,functor adapters,價值在於通過它們直接的繫結,組合,修飾能力,幾乎可以無限制地創造出各種可能的表示式。
配接操作包括繫結(bind),否定(negate),組合(compose)、以及對一般函式或成員函式的修飾。
例如:不小於12 可以使用greater_equal的仿函式;
也可以使用not1(bind2nd(less(),12)),即將less()第二個引數繫結為12,再加上否定操作。
舉例如何設計仿函式自己的配接器:
template
class unary_compose
: public unary_function//typename不是不能放到基類列中嗎?
//巢狀從屬名稱
typename operation1::result_type
operator()(const typename operation2::argument_type& x) const
};template
inline unary_compose
compose1(const operation1& op1,const operation2& op2)
//為什麼這個函式在新建的.h檔案中就編譯不過,報錯是語法錯誤,但是放到xfunctional就可以使用?
函式如何採用配接能力:一元仿函式必須繼承unary_function,二元仿函式必須繼承自binary_function,成員函式必須以mem_fun處理過,一般函式必須以ptr_fun處理過。
迭代器的配接器:insert iterators,reverse iterators,iostream iterators.
insert iterators: 能夠將迭代器的賦值操作轉變為插入操作。包括專司尾端的插入操作,專司頭端的插入操作,以及可以從任意位置執行插入操作
reverse iterators:方便用在從尾端開始執行的演算法上。
iostream iterators:可以將迭代器繫結到某個iostream物件上
迭代器配接器的目的:就是方便演算法上加入自己的應用策略。
舉例:int ia =
dequeid(ia,ia+6)
copy(ia+1,ia +2,front_inserter(id)); //輸出的是1,0,1,2,3,4,5
cout< 以底部容器完成所有工作,而具有這種修改某物介面而成為另一種風貌的性質者稱為配接器,因此stl stack queue priority queue都稱為容器配接器。stack是一種先進後出的資料結構,不允許有遍歷行為。stl是以deque作為預設情況下的stack底部結構。deque為底部結構並封閉... reverse 逆向 迭代器 reverse迭代器是一種配接器。重新定義遞增運算和遞減運算。使其行為正好倒置。如果你使用這類迭代器,演算法將以逆向次序處理元素。所有標準容器都允許使用reverse迭代器來遍歷元素。下面是個例子 1 include 2 include 3 include 4 usin... 函式配接器 bind1st op,value op value,param 繫結op的第乙個引數 bind2st op,value op param,value not1 op op param not2 op op param1,param2 int func1 int p1,int p2 int...STL 容器配接器
STL學習筆記(迭代器配接器)
函式配接器