標準庫提供了超過100個演算法,這些演算法都有一致的結構和類似的用法。除了少數例外,標準庫演算法都對乙個範圍內的元素進行操作。範圍分別用第乙個元素和尾元素之後位置的迭代器。理解演算法的最基本的方法就是了解他們是否讀取元素、改變元素或重排元素。
10.2.1 唯讀演算法
有find和accumulate(求和)
1 #include 2 #include 3 #include 45using
namespace
std;67
intmain()8;
10int sum = accumulate( vec.begin(), vec.end(), 0 );//
對vec中的元素求和,和的初值是0
1112 cout << "
sum:
"<13return0;
14 }
note:accumulate的第三個引數的型別決定了函式中使用哪個加法運算子以及返回值的型別,即:序列中元素型別必須與第三個引數匹配,或者能轉換為第三個引數的型別。
另外乙個例子:
1 #include 2 #include 3 #include 4 #include 56using
namespace
std;78
intmain()9;
1112
string strsum = accumulate( strlist.begin(), strlist.end(), string("xu"
) );
13//
string strsum = accumulate( strlist.begin(), strlist.end(), "" );
//錯誤const char*沒有定義+
1415
16 cout << "
strsum:
"<17return0;
18 }
操作兩個序列的演算法
唯讀演算法equal,用於確定兩個序列是否儲存相同的值。
1 equal( roster.cbegin(), roster.cend(), roster1.cbegin() );//roster1中的元素數目應該至少與roster一樣多
10.2.1節練習
10.3
1 #include 2 #include 3 #include 45using
namespace
std;67
intmain()8;
10int nsum = accumulate( nvec.begin(), nvec.end(), 0
);11
12 cout << "
nsum:
"<13return0;
14 }
10.4
1 #include 2 #include 3 #include 45using
namespace
std;67
intmain()8;
10double dsum = accumulate( v.begin(), v.end(), 0
);11
12 cout << "
dsum:
"<13return0;
14}1516/**
17* 答:錯誤,第三個引數0,導致浮點型轉換到整型過程中,部分資料丟失,結果不符。
18* /
10.5
1 #include 2 #include 3 #include 4 #include 56using
namespace
std;78
intmain()9;
11 list listroster1 = ;
1213
bool isequal =equal( listroster.begin(), listroster.end(), listroster1.begin() );
1415 cout << "
isequal:
"<16return0;
17 }
/*** 沒有什麼問題
*/
10.2.2 寫容器元素的演算法
10 2 初識泛型演算法
目錄10.2.2 寫容器元素的演算法 10.2.3 重排容器的演算法 常見的幾個唯讀演算法 find count accumulate equal accumulate前兩個引數接受乙個迭代器範圍,最後乙個引數接受初值 對vector中的所有元素求和,和的初始值為0 int sum accumula...
c primer學習筆記 初識泛型演算法
1概述 大多數演算法定義在標頭檔案algorithm中。一般情況下,這些演算法並不直接操作容器,而是遍歷迭代器指定的元素範圍。2迭代器使演算法不依賴於容器執行 雖然迭代器使用令演算法不依賴於容器型別,但大多數演算法都使用了乙個 或者多個 元素型別上的操作。關鍵在於 泛型演算法本身不會執行容器操作,只...
c primer之10 1 泛型概述
在順序容器中,沒有定義可以滿足使用者 程式設計師 所需的更多功能介面,所以標準庫定義了一組泛型演算法,之所以稱為 泛型的 適用於不同型別。泛型演算法一般不直接操作容器,而是遍歷迭代器的元素範圍來進行操作。標準庫演算法find 1 include 2 include 3 include 4 5usin...