c++中std::transform詳解和應用代碼示例

std::transform 是 C++ 標準庫中非常常用的算法之一,屬于 <algorithm> 頭文件。它的作用是將一個(或兩個)序列中的元素通過某個函數進行變換,并將結果輸出到另一個序列中


一、std::transform 作用總結

std::transform 支持以下兩種形式:

單輸入版本(Unary operation):

template<class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op);
  • [first1, last1) 區間中的每個元素應用 unary_op,并寫入到從 d_first 開始的輸出迭代器中。

雙輸入版本(Binary operation):

template<class InputIt1, class InputIt2, class OutputIt, class BinaryOperation>
OutputIt transform(InputIt1 first1, InputIt1 last1, InputIt2 first2, OutputIt d_first, BinaryOperation binary_op);
  • [first1, last1)[first2, ...) 中對應元素應用 binary_op(a, b),輸出到 d_first

二、示例代碼

示例1:單輸入 - 所有元素平方

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> input = {1, 2, 3, 4, 5};std::vector<int> output(input.size());std::transform(input.begin(), input.end(), output.begin(),[](int x) { return x * x; });for (int val : output) {std::cout << val << " "; // 輸出:1 4 9 16 25}
}

示例2:雙輸入 - 向量加法

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> a = {1, 2, 3};std::vector<int> b = {4, 5, 6};std::vector<int> result(a.size());std::transform(a.begin(), a.end(), b.begin(), result.begin(),[](int x, int y) { return x + y; });for (int val : result) {std::cout << val << " "; // 輸出:5 7 9}
}

示例3:應用于字符串大小寫轉換

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>int main() {std::string text = "Hello World!";std::transform(text.begin(), text.end(), text.begin(),[](unsigned char c) { return std::toupper(c); });std::cout << text << std::endl;  // 輸出:HELLO WORLD!
}

三、使用注意事項

  1. output 容器需要提前分配好空間(或使用 std::back_inserter
  2. 若輸入和輸出是同一個容器,可以原地修改(transform(..., input.begin(), ...)
  3. 可與 std::function, lambda 表達式 或 普通函數指針結合使用
  4. 雙輸入時,第二個序列長度應不少于第一個序列

四、使用 back_inserter 示例(不需要預分配空間):

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>int main() {std::vector<int> input = {1, 2, 3};std::vector<int> output;std::transform(input.begin(), input.end(), std::back_inserter(output),[](int x) { return x * 10; });for (int v : output)std::cout << v << " ";  // 輸出:10 20 30
}

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

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

相關文章

Yolov5 使用

1.開發背景 在已有的 Conda 環境下實現目標檢測標定。 2.開發需求 實現演示例子的圖片標定。 3.開發環境 Ubuntu20.04 Conda Yolov5 4.實現步驟 4.1 安裝環境 # 創建環境 python 版本建議 3.9 以上 conda create -n yolov5 python3.9# 進入環境 conda activate yolov5# …

資深Java工程師的面試題目(四)性能優化

以下是針對Java性能優化的面試題&#xff0c;涵蓋前后端技術棧的常見優化方式&#xff0c;適合評估候選人對性能調優的理解和實際應用能力&#xff1a; 1. JVM性能調優 題目: 請說明JVM垃圾回收&#xff08;GC&#xff09;的常見類型及其適用場景&#xff0c;并描述如何通過J…

火山引擎TTS使用體驗

文章目錄 前言1. 簡介1.1 能力體驗1.2 功能特性1.3 音色列表1.4 收費情況 2. 開啟服務2.1 創建應用2.3 使用服務介紹 3.Websocket接入演示3.1 編寫demo3.2 代碼解釋3.4運行demo 4. 參考鏈接 前言 語音合成TTS&#xff08;text to Speech&#xff09;是我覺得后續開發產品所不可…

Django中使用流式響應,自己也能實現ChatGPT的效果

最近在研究ChatGPT的時候&#xff0c;想通過openai提供的接口使國內用戶也可以無限制訪問&#xff0c;于是打算基于django開發一款應用。頁面的渲染也得想ChatGPT一樣采用流式響應&#xff0c;django中StreamingHttpResponse是支持流式響應的一種方式。 django 代碼 class Ch…

Python Redis 簡介

Redis 是一個高性能的內存鍵值數據庫&#xff0c;支持多種數據結構&#xff08;字符串、列表、哈希、集合等&#xff09;&#xff0c;常用于緩存、消息隊列和實時數據處理。Python 通過 redis-py 庫與 Redis 交互。 核心功能 內存存儲&#xff1a;數據存儲在內存中&#xff0c…

mac安裝whistle代理抓包工具(支持mock)

工具地址&#xff1a;https://wproxy.org/whistle/ 1、 安裝nodejs環境 參考方法&#xff1a;https://github.com/nvm-sh/nvm 1&#xff09;安裝 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash如圖&#xff0c;安裝成功 2&#xff09;…

基于 mydumper 實現 MySQL 定期全量備份、恢復方案

一、Mydumper 工具介紹 mydumper 是一款社區開源的邏輯備份工具,由 C 語言編寫,與 MySQL 官方提供的 mysqldump 相比,它具有更高的性能和更多的功能,例如: ? 支持多線程導出數據,速度更快; ? 支持一致性備份; ? 支持將導出文件壓縮,節約空間; ? 支持多線程恢復;…

C++中,std::async 一個用于異步編程的工具

在C中&#xff0c;std::async 是一個用于異步編程的工具&#xff0c;它允許你在一個單獨的線程中執行任務&#xff0c;并返回一個 std::future 對象&#xff0c;通過這個對象可以獲取任務的結果或者檢查任務的狀態。 基本用法1 lambda 表達式 #include <iostream> #incl…

【Linux驅動開發 ---- 4_驅動開發框架和 API】

Linux驅動開發 ---- 4_驅動開發框架和 API 目錄 Linux驅動開發 ---- 4_驅動開發框架和 API&#x1f3af; 目標&#xff1a;&#x1f4cc; 1. Linux 設備模型&#xff08;Linux Device Model&#xff09;**設備模型的核心概念**&#xff1a; &#x1f4cc; 2. 設備樹&#xff08…

實景VR展廳建設流程

實景VR展廳&#xff1a;建設流程、用途、案例與未來發展 隨著虛擬現實&#xff08;VR&#xff09;技術的發展&#xff0c;實景VR展廳作為一種創新的展示方式&#xff0c;正在各個領域得到廣泛應用。實景VR展廳提供沉浸式的體驗&#xff0c;豐富展示內容和形式&#xff0c;為觀…

android下拉欄添加媒體音量調節

參考下拉欄的屏幕亮度調節&#xff0c;添加媒體音量調節。 平臺信息&#xff1a; MSM8909.LA.3.1.2_AOSP PLATFORM_VERSION9 BUILD_IDPKQ1.190903.001 效果圖 布局文件與音量圖標 Index: frameworks/base/packages/SystemUI/res/layout/quick_settings_media_volume_dialog.x…

VS Code 配置ROS2開發環境常見問題記錄

1、ctrlshiftp后找不到C/C: Edit configurations 安裝或重裝C插件。 參考鏈接&#xff1a; 搜索C/C: Edit configurations顯示no matching command問題https://www.cnblogs.com/hunghau/p/17195622.html 2、ROS2 API無法轉到定義 &#xff08;1&#xff09;在c_cpp_proper…

Docker Desktop搭建RocketMQ的完整教程

Docker Desktop搭建RocketMQ圖文教程 1. 準備工作 已安裝Docker Desktop&#xff08;本地安裝方法參考上一節教程&#xff09;。需部署三個組件&#xff1a;NameServer、Broker、Console&#xff08;管理界面&#xff09;。 2. 創建目錄和文件 在任意盤&#xff08;如D盤&am…

算法35天|1049. 最后一塊石頭的重量 II、 494. 目標和、 474.一和零

1049. 最后一塊石頭的重量 II 題目 思路與解法 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int i0;i<stones.size();i){sum stones[i];}// 問題轉換為&#xff1a;// 先求得&#xff0c;背包容量為target時&#x…

AWS S3拒絕非https的請求訪問

問題 aws s3桶&#xff0c;安全要求必須強制使用ssl加密訪問&#xff0c;即https。需要添加一個策略拒絕所有不是https的訪問s3桶請求。 解決 在對于桶添加相關拒絕策略即可。如下&#xff1a; {"Version": "2012-10-17","Statement": [{&qu…

GitLab CVE-2025-4278 安全漏洞解決方案

本分分享極狐GitLab 補丁版本 18.0.2, 17.11.4, 17.10.8 的詳細內容。這幾個版本包含重要的缺陷和安全修復代碼&#xff0c;我們強烈建議所有私有化部署用戶應該立即升級到上述的某一個版本。對于極狐GitLab SaaS&#xff0c;技術團隊已經進行了升級&#xff0c;無需用戶采取任…

Async、await是什么?跟promise有什么區別?使用的好處是什么

Async/Await 與 Promise 的深度解析 一、基本概念 1. Promise Promise 是 ES6 引入的異步編程解決方案&#xff0c;表示一個異步操作的最終完成&#xff08;或失敗&#xff09;及其結果值。 function fetchData() {return new Promise((resolve, reject) > {setTimeout(…

MySQL數據庫中所有表的空間占用與行數統計

查看某個數據庫中所有表的空間與行數統計 SELECT TABLE_NAME AS 表名,TABLE_ROWS AS 行數,ROUND(DATA_LENGTH / 1024 / 1024, 2) AS 數據大小(MB),ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS 索引大小(MB),ROUND((DATA_LENGTH INDEX_LENGTH) / 1024 / 1024, 2) AS 總占用空間(…

el-upload 點擊上傳按鈕前先判斷條件滿足再彈選擇文件框

解決思路&#xff1a; 先寫一個上傳按鈕&#xff0c;點擊上傳按鈕后判斷條件是否滿足&#xff0c;滿足則顯示上傳組件并使用ref來控制點擊事件&#xff0c;隱藏自身。 注&#xff1a;上傳成功或者上傳失敗時或者上傳前判斷條件添加不滿足return將this.isShow true 代碼部分…

django ReturnDict 如何修改內容

在Django中&#xff0c;QuerySet 對象通常用于從數據庫中檢索數據&#xff0c;并且可以被轉換為各種格式&#xff0c;例如字典。如果你想修改QuerySet返回的結果&#xff08;例如&#xff0c;將其轉換為dict&#xff09;&#xff0c;你可以在查詢執行后進行操作。這里有幾種常見…