泛型算法——只讀算法(一)

在 C++ 標準庫中,泛型算法的“只讀算法”指那些 不會改變它們所操作的容器中的元素,僅用于訪問或獲取信息的算法,例如查找、計數、遍歷等操作。

accumulate

std::accumulate()是 C++ 標準庫**numeric**頭文件中提供的算法,用于對序列(如數組、容器等)進行累積計算。以下是其詳細用法和常見場景:
  1. 函數原型
template <class InputIt, class T>
T accumulate(InputIt first, InputIt last, T init);template <class InputIt, class T, class BinaryOperation>
T accumulate(InputIt first, InputIt last, T init, BinaryOperation op);

參數

first, last:輸入范圍的迭代器(左閉右開區間 [first, last))。
init:累積的初始值。
op:二元操作函數(可選,默認為加法)。

  1. 基本實例:累加求和
#include <iostream>
#include <vector>
#include <numeric> // 必須包含此頭文件int main() {std::vector<int> nums = {1, 2, 3, 4, 5};// 累加求和(初始值為 0)int sum = std::accumulate(nums.begin(), nums.end(), 0);std::cout << "Sum: " << sum << std::endl; // 輸出 Sum: 15return 0;
}
  1. 自定義操作:累乘
#include <vector>
#include <numeric>int main() {std::vector<int> nums = {2, 3, 4};// 初始值為 1,使用乘法操作int product = std::accumulate(nums.begin(), nums.end(), 1, [](int a, int b) { return a * b; });std::cout << "Product: " << product << std::endl; // 輸出 Product: 24return 0;
}
  1. 自定義操作:字符串連接
#include <vector>
#include <string>
#include <numeric>int main() {std::vector<std::string> words = {"Hello", " ", "World", "!"};// 初始值為空字符串,使用字符串連接std::string sentence = std::accumulate(words.begin(), words.end(), std::string(""), [](const std::string& a, const std::string& b) { return a + b; });std::cout << sentence << std::endl; // 輸出 Hello World!return 0;
}
  1. 常見錯誤
std::vector<double> vals = {1.5, 2.5, 3.5};// 錯誤!初始值 0 是 int 類型,結果會被截斷為 int
double sum = std::accumulate(vals.begin(), vals.end(), 0); // 正確:初始值應為 0.0(double 類型)
double correct_sum = std::accumulate(vals.begin(), vals.end(), 0.0);
std::vector<int> empty_vec;// 危險!若容器為空,直接使用 begin() 和 end() 會導致未定義行為
int sum = std::accumulate(empty_vec.begin(), empty_vec.end(), 0); // 結果為 0(安全)// 但更安全的做法是檢查容器是否為空
if (!empty_vec.empty()) {sum = std::accumulate(empty_vec.begin(), empty_vec.end(), 0);
}
  1. 進階用法:自定義對象累積
struct Point {double x, y;Point operator+(const Point& other) const {return {x + other.x, y + other.y};}
};int main() {std::vector<Point> points = {{1, 2}, {3, 4}, {5, 6}};Point total = std::accumulate(points.begin(), points.end(), Point{0, 0}, [](const Point& a, const Point& b) { return a + b; });std::cout << "Total: (" << total.x << ", " << total.y << ")" << std::endl;// 輸出 Total: (9, 12)return 0;
}
  1. 總結

用途std::accumulate 是一個靈活的算法,適用于求和、求積、字符串拼接、對象合并等場景。
性能:時間復雜度為 O(n),是線性操作。
注意:始終確保初始值類型與操作邏輯匹配,避免迭代器越界

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901752.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SvelteKit 最新中文文檔教程(21)—— 最佳實踐之圖片

前言 Svelte&#xff0c;一個語法簡潔、入門容易&#xff0c;面向未來的前端框架。 從 Svelte 誕生之初&#xff0c;就備受開發者的喜愛&#xff0c;根據統計&#xff0c;從 2019 年到 2024 年&#xff0c;連續 6 年一直是開發者最感興趣的前端框架 No.1&#xff1a; Svelte …

健康養生:開啟活力生活的密鑰

當我們在健身房看到年逾六旬卻身形矯健的老人&#xff0c;在公園偶遇精神矍鑠、步伐輕快的長者&#xff0c;總會驚嘆于他們的健康狀態。其實&#xff0c;這些都得益于長期堅持科學的養生之道。健康養生并非遙不可及的玄學&#xff0c;而是融入生活細節的智慧。? 在飲食的世界…

Linux信號三部曲:產生機制、處理方式與內核接口

Linux系列 文章目錄 Linux系列前言一、背景知識鋪墊1.1 信號的基本概念1.2 進程對信號的處理 二、信號的產生2.1 前臺進程和后臺進程2.2 鍵盤組合鍵2.3 kill 命令2.4 系統調用2.4.1 signal()接口2.4.2 kill()接口2.4.3 raise()接口2.4.4 abort()接口 總結 前言 Linux中&#x…

win7/win10/macos如何切換DNS,提升網絡穩定性

本篇教程教您如何在Windows10、Windows8.1、Windows7、MacOS操作系統切換DNS&#xff0c;以提升系統的穩定性&#xff0c;獲得更好的操作體驗。 Windows10及Windows8.1 1、右鍵單擊“此計算機”&#xff0c;然后選擇“屬性”。進入Windows系統界面后&#xff0c;選擇左側的“…

移動硬盤突然打不開緊急救援指南:從排查到完整恢復?

突發狀況的典型特征? 當移動硬盤突然打不開時&#xff0c;用戶常會遇到多種異常表現&#xff1a;接入電腦后硬盤指示燈雖亮但無法識別、系統反復提示“設備未連接成功”或彈出“磁盤結構損壞”的警告。部分情況下&#xff0c;資源管理器中的盤符雖可見&#xff0c;但雙擊后顯示…

華為OD機試真題——統計匹配的二元組個數(2025A卷:100分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析&#xff1b; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式&#xff01; 2025華為OD真題目錄全流程解析/備考攻略/經驗分享 華為OD機試真題《統計匹配…

半導體制造如何數字化轉型

半導體制造的數字化轉型正通過技術融合與流程重構&#xff0c;推動著這個精密產業的全面革新。全球芯片短缺與工藝復雜度指數級增長的雙重壓力下&#xff0c;頭部企業已構建起四大轉型支柱&#xff1a; 1. 數據中樞重構產線生態 臺積電的「智慧工廠4.0」部署著30萬物聯網傳感器…

[Spark]深入解密Spark SQL源碼:Catalyst框架如何優雅地解析你的SQL

本文內容組織形式 總結具體例子執行語句解析層優化層物理計劃層執行層 猜你喜歡PS 總結 先寫個總結&#xff0c;接下來會分別產出各個部分的源碼解析&#xff0c;Spark SQL主要分為以下五個執行部分。 具體例子 接下來舉個具體的例子來說明 執行語句 SELECT name, age FR…

【數據結構】4.單鏈表實現通訊錄

在上一篇文章我們學會了用單鏈表來實現各種方法&#xff0c;在這一篇文章我們將在單鏈表的基礎上實現通訊錄。 0、準備工作 實現通訊錄之前&#xff0c;我們還需要在單鏈表的基礎上添加2個文件&#xff0c;頭文件Contact.h和源文件Contact.c。Contact.c來實現通訊錄方法的聲明…

【bash】.bashrc

查看當前路徑文件數量 alias file_num"ls -l | grep ^- | wc -l"查看文件大小 alias file_size"du -sh"alias ll alias ll"ls -ltrh"cd的同時執行ll alias cdcdls; function cdls() {builtin cd "$1" && ll }自定義prompt…

微信小程序實戰案例 - 餐館點餐系統 階段 2 – 購物車

階段?2 – 購物車&#xff08;超詳細版&#xff09; 目標 把“加入購物車”做成 全局狀態&#xff0c;任何頁面都能讀寫在本地 持久化&#xff08;關閉小程序后購物車仍在&#xff09;新建 購物車頁&#xff1a;數量增減、總價實時計算、去結算入口打 Git?Tag v2.0?cart 1. …

從紅黑樹到哈希表:原理對比與典型場景應用解析(分布式以及布隆過濾器)

在數據結構的世界里&#xff0c;紅黑樹一直以「自平衡二叉查找樹」的身份備受贊譽。憑借紅黑節點的精妙設計&#xff0c;它能將插入、刪除、查找的時間復雜度穩定控制在 ( log ? n ) (\log n) (logn)&#xff0c;成為處理有序數據的經典方案。然而&#xff0c;當業務場景對「…

游戲報錯?MFC140.dll怎么安裝才能解決問題?提供多種MFC140.dll丟失修復方案

MFC140.dll 是 Microsoft Visual C 2015 運行庫的重要組成部分&#xff0c;許多軟件和游戲依賴它才能正常運行。如果你的電腦提示 "MFC140.dll 丟失" 或 "MFC140.dll 未找到"&#xff0c;說明系統缺少該文件&#xff0c;導致程序無法啟動。本文將詳細介紹 …

《電子類專業:通往科技未來的鑰匙》

一、電子類專業全景概覽 在當今科技飛速發展的時代,電子類專業無疑占據著現代科技體系中基礎與核心的重要地位。從我們日常生活中不可或缺的智能手機、電腦,到推動社會進步的人工智能、大數據技術,再到探索宇宙奧秘的航天航空設備,電子類專業的身影無處不在。它就像一把萬…

Java--批量刪除

前端部分 前端代碼主要負責收集用戶選擇的學生記錄的 id&#xff0c;并將這些 id 發送給后端的 DeleteMoreServlet 進行處理。 批量刪除按鈕綁定點擊事件 $(".deleteMore").on("click",function(){// ... }); 當用戶點擊 “批量刪除” 按鈕時&#xff…

2025年4月份生活有感

今天在5000B培訓的下午&#xff0c;一起入所來的小伙伴&#xff0c;有個申請了深圳大學的博士&#xff0c;已錄取。哎&#xff0c;想起了當年申博時候信心和決心不足&#xff0c;導致后面匆匆的拿了offer去工作。看到同事的選擇還是非常羨慕&#xff0c;想到自己5月份的婚禮&am…

數學建模學習資料免費分享:歷年賽題與優秀論文、算法課程、數學軟件等

本文介紹并分享自己當初準備數學建模比賽時&#xff0c;收集的所有資料&#xff0c;包括歷年賽題與論文、排版模板、算法講解課程與書籍、評分標準、數學建模軟件等各類資料。 最近&#xff0c;準備將自己在學習過程中&#xff0c;到處收集到的各類資料都整理一下&#xff0c;并…

關于 微服務負載均衡 的詳細說明,涵蓋主流框架/解決方案的對比、核心功能、配置示例及總結表格

以下是關于 微服務負載均衡 的詳細說明&#xff0c;涵蓋主流框架/解決方案的對比、核心功能、配置示例及總結表格&#xff1a; 1. 負載均衡的核心概念 負載均衡在微服務中用于將請求分發到多個服務實例&#xff0c;以實現&#xff1a; 高可用性&#xff1a;避免單點故障。性…

個人博客搭建過程

嘗試博客搭建,前面注冊部分很簡單&#xff0c;就不寫了&#xff0c;以我看到的一個博客為基礎&#xff0c;加上我自己的測試結束 1.官網 https://dash.infinityfree.com 前半部分參考&#xff1a; 使用Infinityfree免費虛擬主機搭建一個wordpress網站 2.創建賬戶或登錄您的…

Proxmox VE 網絡配置命令大全

如果對 Proxmox VE 全棧管理感興趣&#xff0c;可以關注“Proxmox VE 全棧管理”專欄&#xff0c;后續文章將圍繞該體系&#xff0c;從多個維度深入展開。 概要&#xff1a;Proxmox VE 網絡配置靈活&#xff0c;滿足虛擬化組網需求。基礎靠橋接實現虛擬機與物理網絡互聯&#x…