最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++的STL中accumulate函數(shù)的使用方法

 更新時(shí)間:2022年03月24日 09:43:49   作者:_Phoebe__  
這篇文章主要介紹了C++的STL中accumulate的使用方法,accumulate作用是累加求和即自定義類型數(shù)據(jù)處理,下文具體的操作方法需要的小伙伴可以參考一下

前言:

accumulate定義在#include中,作用有兩個(gè),一個(gè)是累加求和,另一個(gè)是自定義類型數(shù)據(jù)的處理

1.累加求和

int sum = accumulate(vec.begin() , vec.end() , 42);

accumulate帶有三個(gè)形參:頭兩個(gè)形參指定要累加的元素范圍,第三個(gè)形參則是累加的初值。
accumulate函數(shù)將它的一個(gè)內(nèi)部變量設(shè)置為指定的初始值,然后在此初值上累加輸入范圍內(nèi)所有元素的值。accumulate算法返回累加的結(jié)果,其返回類型就是其第三個(gè)實(shí)參的類型。

可以使用accumulate把string型的vector容器中的元素連接起來(lái):

string sum = accumulate(v.begin() , v.end() , string(" "));

這個(gè)函數(shù)調(diào)用的效果是:從空字符串開始,把vec里的每個(gè)元素連接成一個(gè)字符串。

2.自定義數(shù)據(jù)類型的處理

C++ STL中有一個(gè)通用的數(shù)值類型計(jì)算函數(shù)— accumulate(),可以用來(lái)直接計(jì)算數(shù)組或者容器中C++內(nèi)置數(shù)據(jù)類型,

例如:

#include <numeric>
int arr[]={10,20,30,40,50};
vector<int> va(&arr[0],&arr[5]);
int sum=accumulate(va.begin(),va.end(),0); ?//sum = 150

是對(duì)于自定義數(shù)據(jù)類型,我們就需要自己動(dòng)手寫一個(gè)回調(diào)函數(shù)來(lái)實(shí)現(xiàn)自定義數(shù)據(jù)的處理,然后讓它作為accumulate()的第四個(gè)參數(shù),accumulate()的原型為

template<class _InIt,
?? ?class _Ty,
?? ?class _Fn2> inline
?? ?_Ty _Accumulate(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func)
?? ?{?? ?// return sum of _Val and all in [_First, _Last), using _Func
?? ?for (; _First != _Last; ++_First)
?? ??? ?_Val = _Func(_Val, *_First);
?? ?return (_Val);
?? ?}

例如:

#include <vector>
#include <string>
using namespace std;
?
struct Grade
{
?? ?string name;
?? ?int grade;
};
?
int main()
{
?? ?Grade subject[3] = {
?? ??? ?{ "English", 80 },
?? ??? ?{ "Biology", 70 },
?? ??? ?{ "History", 90 }
?? ?};
?
?? ?int sum = accumulate(subject, subject + 3, 0, [](int a, Grade b){return a + b.grade; });//a值是前面計(jì)算的中間結(jié)果 看前面的原型模板定義~ a 就是 _Val
?? ?cout << sum << endl;
?
?? ?system("pause");
?? ?return 0;
}

3.用法補(bǔ)充

我們?cè)诒匾獣r(shí)可以定義自己的加法運(yùn)算。

例如:

???????std::vector<int> values {2, 0, 12, 3, 5, 0, 2, 7, 0, 8};
int min {3};
auto sum = std::accumulate(std::begin(values), std::end(values), 0, [min] (int sum, int v)
{
? ? if(v < min)
? ? ? ? return sum;
? ? return sum + v;
});
std::cout << "The sum of the elements greater than " << min-1<<"is " << sum << std::endl; ?// 35

這里忽略了值小于 3 的元素。這個(gè)條件可以盡可能復(fù)雜,因此,我們能夠求出指定范圍內(nèi)的元素之和。這個(gè)運(yùn)算并不一定要是加法,可以是任何不修改操作數(shù)或不使定義范圍的迭代器無(wú)效的運(yùn)算。例如,為數(shù)值元素定義的乘法運(yùn)算函數(shù)會(huì)生成元素的乘積,只要初值為 1。實(shí)現(xiàn)浮點(diǎn)元素除法的函數(shù)會(huì)生成元素乘積的倒數(shù),只要初值為 1。

下面展示了如何生成元素的乘積:

std::vector<int> values {2, 3, 5, 7, 11, 13};
auto product = std::accumulate(std::begin(values), std::end(values), 1, std::multiplies<int>()); // 30030

這里用來(lái)自于 functional 頭文件的函數(shù)作為第 4 個(gè)參數(shù)。如果有值為 0 的元素,可以像上一個(gè)代碼段中的 lambda 表達(dá)式那樣忽略它們。

string 類支持加法,因此可以將 accumulate() 應(yīng)用到 string 對(duì)象的序列上:

std:: vector<string> numbers {"one", "two", "three", "four", "five","six", "seven","eight", "nine","ten"};
auto s = std::accumulate(std::begin(numbers), std::end(numbers), string{},[](strings str, string& element)
{
? ? if (element[0] == 't')
? ? ? ? return str +' '+ element;
? ? return str;
}); // Result: " two three ten"

這段代碼連接了以開頭的 string 對(duì)象,并用空格將它們隔開。

acumulate() 算法得到的結(jié)果可能和它所應(yīng)用的序列中的元素類型不同:

std::vector<int> numbers {1, 2, 3, 10, 11, 12};
auto s = std::accumulate(std::begin(numbers), std::end(numbers),string {"The numbers are"},[](strings str, int n){ return str + " : " + std::to_string(n);});
std::cout << s << std::endl;//Output: The numbers are: 1: 2: 3: 10: 11: 12

lambda 表達(dá)式使用的 to_string() 函數(shù)會(huì)返回一個(gè)數(shù)值參數(shù)的 string 形式,所以應(yīng)用 accumulate() 到這里的整數(shù)序列會(huì)返回注釋中顯示的 string。

到此這篇關(guān)于C++的STL中accumulate函數(shù)的使用方法的文章就介紹到這了,更多相關(guān)C++的STL中accumulate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++內(nèi)存模型與名稱空間概念講解

    C++內(nèi)存模型與名稱空間概念講解

    這篇文章主要介紹了C++內(nèi)存模型與名稱空間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • C語(yǔ)言程序環(huán)境中的預(yù)處理詳解

    C語(yǔ)言程序環(huán)境中的預(yù)處理詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言程序環(huán)境中的預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++?右值引用與?const?關(guān)鍵字詳解

    C++?右值引用與?const?關(guān)鍵字詳解

    C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,const關(guān)鍵字是一種修飾符,這篇文章主要介紹了C++?右值引用與?const?關(guān)鍵字,需要的朋友可以參考下
    2022-10-10
  • vs2019中使用MFC構(gòu)建簡(jiǎn)單windows窗口程序

    vs2019中使用MFC構(gòu)建簡(jiǎn)單windows窗口程序

    今天發(fā)現(xiàn)網(wǎng)上好多MFC代碼都不能用,給大家分享一個(gè)簡(jiǎn)單的MFC窗口語(yǔ)言,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++命名空間使用詳細(xì)介紹

    C++命名空間使用詳細(xì)介紹

    考慮一種情況,當(dāng)我們有兩個(gè)同名的人,Zara,在同一個(gè)班里。當(dāng)我們需要對(duì)它們進(jìn)行區(qū)分我們必須使用一些額外的信息和它們的名字,比如它們生活在不同的區(qū)域或者興趣愛好什么的,在C++程序中也會(huì)遇到同樣的情況,所以命名空間就此產(chǎn)生
    2022-09-09
  • 詳解設(shè)計(jì)模式中的中介者模式在C++編程中的運(yùn)用

    詳解設(shè)計(jì)模式中的中介者模式在C++編程中的運(yùn)用

    這篇文章主要介紹了設(shè)計(jì)模式中的中介者模式在C++編程中的運(yùn)用,中介者模式將對(duì)象間的通信封裝到一個(gè)類中,將多對(duì)多的通信轉(zhuǎn)化為一對(duì)多的通信,降低了系統(tǒng)的復(fù)雜性,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹及其遍歷

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹及其遍歷

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹及其遍歷的相關(guān)資料,為了加快查找節(jié)點(diǎn)的前驅(qū)和后繼。對(duì)二叉樹的線索化就是對(duì)二叉樹進(jìn)行一次遍歷,在遍歷的過(guò)程中檢測(cè)節(jié)點(diǎn)的左右指針是否為空,如果是空,則將他們改為指向前驅(qū)和后繼節(jié)點(diǎn)的線索,需要的朋友可以參考下
    2017-08-08
  • C語(yǔ)言代碼 模塊化實(shí)現(xiàn)三子棋

    C語(yǔ)言代碼 模塊化實(shí)現(xiàn)三子棋

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言 模塊化實(shí)現(xiàn)三子棋程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語(yǔ)言全面細(xì)致講解文件操作

    C語(yǔ)言全面細(xì)致講解文件操作

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-05-05
  • C語(yǔ)言結(jié)構(gòu)體的一些理解

    C語(yǔ)言結(jié)構(gòu)體的一些理解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體的一些理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

抚松县| 固原市| 十堰市| 尉氏县| 澄迈县| 泾源县| 承德市| 临朐县| 山东省| 卢湾区| 浙江省| 台中市| 敦煌市| 新郑市| 廊坊市| 威海市| 弋阳县| 和平县| 雅江县| 偃师市| 黔江区| 泰宁县| 六枝特区| 双峰县| 朝阳区| 平罗县| 嘉义市| 定日县| 佛学| 启东市| 新乡市| 阳春市| 安庆市| 天峨县| 安达市| 宜良县| 邵武市| 霸州市| 杂多县| 泰安市| 武邑县|