1. 程式人生 > 其它 >泛型演算法:求和演算法accumulate()

泛型演算法:求和演算法accumulate()

技術標籤: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()將多個結構體物件按自定義的加法規則進行相加。