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

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

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

前言:

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

1.累加求和

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

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

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

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

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

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

C++ STL中有一個通用的數(shù)值類型計算函數(shù)— accumulate(),可以用來直接計算數(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

是對于自定義數(shù)據(jù)類型,我們就需要自己動手寫一個回調(diào)函數(shù)來實現(xiàn)自定義數(shù)據(jù)的處理,然后讓它作為accumulate()的第四個參數(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值是前面計算的中間結(jié)果 看前面的原型模板定義~ a 就是 _Val
?? ?cout << sum << endl;
?
?? ?system("pause");
?? ?return 0;
}

3.用法補充

我們在必要時可以定義自己的加法運算。

例如:

???????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 的元素。這個條件可以盡可能復雜,因此,我們能夠求出指定范圍內(nèi)的元素之和。這個運算并不一定要是加法,可以是任何不修改操作數(shù)或不使定義范圍的迭代器無效的運算。例如,為數(shù)值元素定義的乘法運算函數(shù)會生成元素的乘積,只要初值為 1。實現(xiàn)浮點元素除法的函數(shù)會生成元素乘積的倒數(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

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

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

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 對象,并用空格將它們隔開。

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

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 表達式使用的 to_string() 函數(shù)會返回一個數(shù)值參數(shù)的 string 形式,所以應用 accumulate() 到這里的整數(shù)序列會返回注釋中顯示的 string。

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

相關(guān)文章

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

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

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

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

    這篇文章主要為大家詳細介紹了C語言程序環(huán)境中的預處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    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)建簡單windows窗口程序

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

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

    C++命名空間使用詳細介紹

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

    詳解設計模式中的中介者模式在C++編程中的運用

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

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

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

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

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

    C語言全面細致講解文件操作

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

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

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

最新評論

胶州市| 吉木乃县| 鸡泽县| 长宁县| 太湖县| 芮城县| 长治县| 竹溪县| 金昌市| 西和县| 积石山| 朔州市| 丰镇市| 哈巴河县| 涞水县| 禄丰县| 峨山| 乌拉特后旗| 绥阳县| 连江县| 武城县| 安义县| 墨玉县| 旺苍县| 孟津县| 抚远县| 区。| 都江堰市| 林口县| 中江县| 永寿县| 内乡县| 长海县| 西安市| 林甸县| 布尔津县| 桦甸市| 利川市| 大悟县| 海宁市| 保靖县|