泛型演算法:求和演算法accumulate()
阿新 • • 發佈:2020-12-27
技術標籤:c++標準庫中的演算法
標頭檔案:#include <numeric>
accumulate(start迭代器,end迭代器,和的初值)
使用這個演算法的前提是該型別可以使用“+”運算,求和的結果儲存在第三個引數中
QStringList list; list <<"aa" <<"bb" <<"cc" << "dd"; auto result = std::accumulate(std::begin(list),std::end(list),QString("xx")); qDebug()<<result;
初值是“xx”,求和在此基礎上加。
這裡QString("xx"),不能省略為"xx",因為求和的結果是QString型別,前者顯示指明瞭結果是QString型別,後者實際上是(C語言中的)字串常量:char * p = "xx"
對於自定義型別,只要過載了“+”運算子,那就能使用此演算法。實驗:
#include <numeric> #include <QDebug> struct ceshi { int frist = 0; int second = 0; ceshi operator+(const ceshi& b)const { ceshi c; c.frist = this->frist + b.frist; c.second = this->second + b.second; return c; } }; int main(int argc, char *argv[]) { std::list<ceshi> list; ceshi c1; c1.frist = 10; c1.second = 20; list.push_back(c1); ceshi c2; c2.frist = 30; c2.second = 40; list.push_back(c2); ceshi c3; c3.frist = 50; c3.second = 60; list.push_back(c3); ceshi c4; c4.frist = 70; c4.second = 80; list.push_back(c4); ceshi c0; auto result = std::accumulate(std::begin(list),std::end(list),c0); qDebug()<<result.frist<<result.second; }
這裡自定義一個結構體,然後過載了結構體的“+”運算子,就能使用accumulate()將多個結構體物件按自定義的加法規則進行相加。