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

C++?STL?中的數(shù)值算法示例講解

 更新時(shí)間:2022年04月08日 09:35:24   作者:Aatrowen  
本片文章講解了C++STL?中的數(shù)值算法,包含iota、accumulate、adjacent_difference、inner_product、partial_sum這些方法的使用,感興趣的朋友來看看吧<BR>

以下算法均包含在頭文件 numeric 中

1.iota

該函數(shù)可以把一個(gè)范圍內(nèi)的序列從給定的初始值開始累加
先看用法。
例:
假設(shè)我需要一個(gè)長(zhǎng)度為10,從5開始遞增的序列

    vector<int> a(10);
    iota(begin(a), end(a), 5);

    for (auto x : a) {
        cout << x << " ";
    }

輸出:

5 6 7 8 9 10 11 12 13 14

這樣就可以很方便的創(chuàng)建一個(gè)遞增的序列,而不用使用for循環(huán)
此外,該函數(shù)是使用連續(xù)的支持 operator++()的 T 類型值填充序列
也就是說double類型也可以使用,string類型也可以使用。
只要是重載了++運(yùn)算符的類型都可以使用。

2.accumulate

曾經(jīng)在算法比賽中看見別人使用accumulate函數(shù)計(jì)算出了一個(gè)數(shù)組的和。
覺得特別的優(yōu)雅,像這樣:

    vector<int> a(10);
    iota(begin(a), end(a), 1);

    cout << accumulate(begin(a), end(a), 0) << "\n";  // 計(jì)算從1加到10的和,從0開始加

輸出:

55

從那天起,每當(dāng)我要求一個(gè)序列的和的時(shí)候,我都會(huì)使用這個(gè)方法...
但是今天,當(dāng)我看到accumulate的源碼之后:

template <class InputIterator, class T>
   T accumulate (InputIterator first, InputIterator last, T init)
{
  while (first!=last) {
    init = init + *first;  // or: init=binary_op(init,*first) for the binary_op version
    ++first;
  }
  return init;
}

注意看這里:

哇哦,它竟然還支持二元仿函數(shù),詳解C++ functional庫中的仿函數(shù)使用方法
于是,我有了一個(gè)大膽的想法。
求一個(gè)數(shù)組的乘積

    vector<int> a(10);
    iota(begin(a), end(a), 1);

    cout << accumulate(begin(a), end(a), 1, multiplies<int>()) << "\n";  // 計(jì)算從1加到10的乘積,從1開始乘

輸出:

3628800

同理,還可以求數(shù)組的減,數(shù)組的除,數(shù)組的模??

3.partial_sum

這個(gè)函數(shù)可以用來求前綴和,前綴和指一個(gè)數(shù)組的某下標(biāo)之前的所有數(shù)組元素的和(包含其自身)。

例如,1、2、3、4、5的前綴和數(shù)組為 1 3 6 10 15

    vector<int> a(5);
    iota(begin(a), end(a), 1);

    partial_sum(begin(a), end(a), begin(a)); // 求a的前綴和,賦值給a數(shù)組(第三個(gè)參數(shù))

    for (auto x : a) {
        cout << x << " ";
    }

輸出:

1 3 6 10 15

有了上一個(gè)函數(shù)的經(jīng)驗(yàn),我們還可以求一個(gè)數(shù)組的前綴乘、除等

例:

    partial_sum(begin(a), end(a), begin(a), multiplies<int>());

輸出:

1 2 6 24 120

4.adjacent_difference

這個(gè)函數(shù)可以對(duì)一個(gè)序列里相鄰兩個(gè)元素進(jìn)行運(yùn)算,通過differerce這個(gè)詞可以看出來,默認(rèn)是計(jì)算相鄰兩元素的差

vector<int> a{1, 4, 5, 100, 40};

adjacent_difference(begin(a), end(a), begin(a)); // 求a數(shù)組相鄰元素的差,賦值給a數(shù)組(第三個(gè)參數(shù))

for (auto x : a) {
    cout << x << " ";
}

輸出:

1 3 1 95 -60

今天我想計(jì)算相鄰兩元素的乘積

adjacent_difference(begin(a), end(a), begin(a), multiplies<int>());

輸出:

1 4 20 500 4000

5.inner_product

這個(gè)函數(shù)默認(rèn)情況下可以求序列中每個(gè)元素的內(nèi)積之和:

    vector<int> a(3);
    iota(begin(a), end(a), 1);

    cout << inner_product(begin(a), end(a), begin(a), 10) << "\n"; // 從初值10開始加上序列各元素的內(nèi)積

輸出:

24

還可以用來求兩個(gè)序列元素兩兩相乘再相加的結(jié)果

    vector<int> a{1, 2, 3};
    vector<int> b{2, 3, 4};

    // 1 * 2 + 2 * 3 + 3 * 4
    cout << inner_product(begin(a), end(a), begin(b), 0) << "\n";

輸出:

20

此外,還可以通過仿函數(shù)來替代上述的兩個(gè)操作符 + 和 *

    vector<int> a{1, 2, 3};
    vector<int> b{2, 3, 4};

    cout << inner_product(begin(a), end(a), begin(b), 1
                        , multiplies<int>(), minus<int>()) << "\n";
                            // 原來的加法 +  // 原來的乘法 *
                            // 計(jì)算 (1 - 2) * (2 - 3) * (3 - 4) = -1

輸出:

-1

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

相關(guān)文章

  • Qt設(shè)計(jì)時(shí)鐘效果

    Qt設(shè)計(jì)時(shí)鐘效果

    這篇文章主要為大家詳細(xì)介紹了Qt設(shè)計(jì)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C語言計(jì)算1/1+1/2+1/3+…+1/n的問題

    C語言計(jì)算1/1+1/2+1/3+…+1/n的問題

    這篇文章主要介紹了C語言計(jì)算1/1+1/2+1/3+…+1/n的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 深入理解大數(shù)與高精度數(shù)的處理問題

    深入理解大數(shù)與高精度數(shù)的處理問題

    本篇文章是對(duì)大數(shù)與高精度數(shù)的處理進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • linux之a(chǎn)wk命令的用法

    linux之a(chǎn)wk命令的用法

    awk是一個(gè)非常棒的數(shù)字處理工具。相比于sed常常作用于一整行的處理,awk則比較傾向于將一行分為數(shù)個(gè)“字段”來處理。運(yùn)行效率高,而且代碼簡(jiǎn)單,對(duì)格式化的文本處理能力超強(qiáng)
    2013-10-10
  • c++ 求數(shù)組最大最小值函數(shù)的實(shí)現(xiàn)

    c++ 求數(shù)組最大最小值函數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了c++ 求數(shù)組最大最小值函數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MFC命名規(guī)則匯總

    MFC命名規(guī)則匯總

    這篇文章主要介紹了MFC命名規(guī)則,對(duì)于初學(xué)者而言需要牢固掌握這類規(guī)則,需要的朋友可以參考下
    2014-07-07
  • C++深入探究友元使用

    C++深入探究友元使用

    采用類的機(jī)制后實(shí)現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此提供類與外界間的通信接口。但是,有時(shí)需要定義一些函數(shù),這些函數(shù)不是類的一部分,但又需要頻繁地訪問類的數(shù)據(jù)成員,這時(shí)可以將這些函數(shù)定義為該類的友元函數(shù)
    2022-07-07
  • c++遍歷lua table示例

    c++遍歷lua table示例

    這篇文章主要介紹了c++遍歷lua table示例,需要的朋友可以參考下
    2014-04-04
  • c++實(shí)現(xiàn)超簡(jiǎn)單的貪吃蛇游戲?qū)嵗榻B

    c++實(shí)現(xiàn)超簡(jiǎn)單的貪吃蛇游戲?qū)嵗榻B

    大家好,本篇文章主要講的是c++實(shí)現(xiàn)超簡(jiǎn)單的貪吃蛇游戲?qū)嵗榻B,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 詳解C語言基礎(chǔ)的類型轉(zhuǎn)換

    詳解C語言基礎(chǔ)的類型轉(zhuǎn)換

    這篇文章主要為大家介紹了C語言基礎(chǔ)的類型轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評(píng)論

赤壁市| 余姚市| 兴文县| 灌南县| 修水县| 溧水县| 资源县| 项城市| 隆昌县| 临清市| 开鲁县| 尼木县| 三明市| 南溪县| 三门县| 大港区| 鄂托克旗| 板桥市| 靖安县| 嫩江县| 威海市| 桓仁| 塔城市| 翼城县| 年辖:市辖区| 万年县| 太仆寺旗| 塘沽区| 桑植县| 峨边| 吴川市| 九龙城区| 奎屯市| 武冈市| 茂名市| 陕西省| 惠水县| 安溪县| 襄垣县| 磐石市| 朝阳县|