網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
以下算法均包含在頭文件 numeric 中
1.iota
該函數(shù)可以把一個(gè)范圍內(nèi)的序列從給定的初始值開(kāi)始累加
先看用法。
例:
假設(shè)我需要一個(gè)長(zhǎng)度為10,從5開(kāi)始遞增的序列
vectora(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 類(lèi)型值填充序列
也就是說(shuō)double類(lèi)型也可以使用,string類(lèi)型也可以使用。
只要是重載了++運(yùn)算符的類(lèi)型都可以使用。
2.accumulate
曾經(jīng)在算法比賽中看見(jiàn)別人使用accumulate函數(shù)計(jì)算出了一個(gè)數(shù)組的和。
覺(jué)得特別的優(yōu)雅,像這樣:
vectora(10); iota(begin(a), end(a), 1); cout << accumulate(begin(a), end(a), 0) << "\n"; // 計(jì)算從1加到10的和,從0開(kāi)始加
輸出:
55
從那天起,每當(dāng)我要求一個(gè)序列的和的時(shí)候,我都會(huì)使用這個(gè)方法...
但是今天,當(dāng)我看到accumulate的源碼之后:
templateT 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庫(kù)中的仿函數(shù)使用方法
于是,我有了一個(gè)大膽的想法。
求一個(gè)數(shù)組的乘積
vectora(10); iota(begin(a), end(a), 1); cout << accumulate(begin(a), end(a), 1, multiplies ()) << "\n"; // 計(jì)算從1加到10的乘積,從1開(kāi)始乘
輸出:
3628800
同理,還可以求數(shù)組的減,數(shù)組的除,數(shù)組的模?
3.partial_sum
這個(gè)函數(shù)可以用來(lái)求前綴和,前綴和指一個(gè)數(shù)組的某下標(biāo)之前的所有數(shù)組元素的和(包含其自身)。
例如,1、2、3、4、5的前綴和數(shù)組為 1 3 6 10 15
vectora(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());
輸出:
1 2 6 24 120
4.adjacent_difference
這個(gè)函數(shù)可以對(duì)一個(gè)序列里相鄰兩個(gè)元素進(jìn)行運(yùn)算,通過(guò)differerce這個(gè)詞可以看出來(lái),默認(rèn)是計(jì)算相鄰兩元素的差
vectora{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());
輸出:
1 4 20 500 4000
5.inner_product
這個(gè)函數(shù)默認(rèn)情況下可以求序列中每個(gè)元素的內(nèi)積之和:
vectora(3); iota(begin(a), end(a), 1); cout << inner_product(begin(a), end(a), begin(a), 10) << "\n"; // 從初值10開(kāi)始加上序列各元素的內(nèi)積
輸出:
24
還可以用來(lái)求兩個(gè)序列元素兩兩相乘再相加的結(jié)果
vectora{1, 2, 3}; vector b{2, 3, 4}; // 1 * 2 + 2 * 3 + 3 * 4 cout << inner_product(begin(a), end(a), begin(b), 0) << "\n";
輸出:
20
此外,還可以通過(guò)仿函數(shù)來(lái)替代上述的兩個(gè)操作符 + 和 *
vectora{1, 2, 3}; vector b{2, 3, 4}; cout << inner_product(begin(a), end(a), begin(b), 1 , multiplies (), minus ()) << "\n"; // 原來(lái)的加法 + // 原來(lái)的乘法 * // 計(jì)算 (1 - 2) * (2 - 3) * (3 - 4) = -1
輸出:
-1
原文鏈接:https://www.cnblogs.com/Aatrowen-Blog/p/16114383.html
相關(guān)推薦
- 2023-02-12 redis如何清理緩存_Redis
- 2022-06-15 Python實(shí)現(xiàn)RSA加密解密_python
- 2022-05-04 python機(jī)器學(xué)習(xí)實(shí)現(xiàn)oneR算法(以鳶尾data為例)_python
- 2022-07-14 python如何往列表頭部和尾部添加元素_python
- 2022-07-03 Qt讀寫(xiě)ini文件之QSettings用法_C 語(yǔ)言
- 2022-06-28 使用?Docker?Compose?構(gòu)建復(fù)雜的多容器?App的方法_docker
- 2022-01-25 項(xiàng)目啟動(dòng)的時(shí)候報(bào)Exception in thread main 錯(cuò)誤解決方法
- 2021-12-05 判斷網(wǎng)頁(yè)時(shí)瀏覽器打開(kāi)還是釘釘打開(kāi)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支