首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

STL 算法對決:for_each vs transform——效能與靈活性的權衡

     編輯:關於C++

核心差異速覽

特性for_eachtransform
速度快(引用傳參,原地修改)較慢(傳值+返回值,需寫回)
靈活度單區間,只能修改元素雙區間,可異構轉換、多對一
適用場景單區間就地修改區間轉換、兩區間運算、輸出到不同容器

代碼對比實驗

#include 
#include 
#include 
using namespace std;

// for_each:引用參數,原地修改
void square_ref(int& x) { x = x * x; }

// transform:傳值參數,返回結果
int square_val(int x) { return x * x; }

int main() {
    vector a(9), b(9);
    iota(a.begin(), a.end(), 1);
    iota(b.begin(), b.end(), 1);

    // for_each
    for_each(a.begin(), a.end(), square_ref);
    // transform
    transform(b.begin(), b.end(), b.begin(), square_val);

    // 輸出驗證
    for (int v : a) cout << v << ' '; cout << endl;
    for (int v : b) cout << v << ' '; cout << endl;
    return 0;
}

for_each vs transform 示意圖

選擇指南

  • 單區間、就地修改、追求極致速度 → for_each + 引用參數。
  • 需要轉換型別、輸出到不同容器、兩區間運算、保留原資料 → transform。
  • 現代 C++ 亦可考慮範圍-based for 迴圈或 std::ranges(C++20)獲得更佳表達力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved