演算法依賴於迭代器,而迭代器不依賴於容器,所以演算法不依賴於容器
但是演算法往往涉及比較,但是容器中的元素不一定定義了比較運算子,所以
大多數的演算法提供了一種方法,允許我們使用自定義的操作來代替預設的運算子
對於只讀取而不改變元素的演算法,最好使用cbegin() cend()這裡要注意的是謂詞的種類,一元謂詞只能接收乙個引數,二元謂詞只能接收兩個引數。一元謂詞還是二元謂詞是由演算法本身決定的。
解決謂詞引數數量限制的一種方法
形式
[捕獲列表]
(引數列表)
->
return type
這部分雖然不常用但是全部都是重點
auto newcallable =
bind
(callable, arg_list)
這裡placeholder的概念很重要,_1, _2… 作為佔位符,接收引數,同時還可以巧用於重排引數順序。
反向迭代器是重點
c primer 筆記,第十章(泛型演算法)
accumulate第三個三處所傳的儲值的型別必須定義了 運算子,例如 將空串當作乙個字面值傳給第三個引數是不可以的 會導致編譯錯誤,const char 上並沒有定義 運算子 string sum accumulate v.cbegin v.cend string上定義了 運算子 string s...
c primer 第十章泛型演算法lambda
謂詞是乙個呼叫表示式,其返回結果是乙個能用做條件的值。標準庫演算法為此分為兩類 1 一元謂詞 意味著只能接受單一引數 2 二元謂詞 意味著他們有兩個引數 接受謂詞的演算法對輸入序列中的元素呼叫謂詞。因此元素型別必須能轉換為謂詞的引數型別。以sort和isshorter舉例 eg bool issho...
第十章 泛型演算法
特殊迭代器 插入迭代器 被繫結到乙個容器上,可用來向容器插入元素 流迭代器 被繫結到輸入 輸出流上,可用來遍歷所關聯io流 反向迭代器 向後而不是向前移動,除了forward list,容器都擁有它 移動迭代器 不是拷貝其中的元素,而是移動它們 插入迭代器操作 it t 在it指定的當前位置插入t,...