Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm transform() trong C++ STL

Hàm transform() trong thư viện chuẩn C++ (STL) được sử dụng để áp dụng một phép toán lên tất cả các phần tử của một phạm vi (range) và lưu kết quả vào một phạm vi đích. Hàm này nằm trong header <algorithm>.

transform() hoạt động theo hai chế độ:

  • Chế độ unary (một toán hạng): Áp dụng một hàm đơn biến lên mỗi phần tử
  • Chế độ binary (hai toán hạng): Áp dụng một hàm hai biến lên các cặp phần tử từ hai phạm vi

1. Chế độ Unary Operation

Áp dụng một hàm nhận một tham số lên từng phần tử.

Ví dụ: Tính bình phương các phần tử mảng

#include <iostream>
#include <algorithm>

using namespace std;

int square(int x) {
    return x * x;
}

int main() {
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int res[10];
    
    transform(arr, arr + 10, res, square);
    
    for (int i = 0; i < 10; i++) {
        cout << res[i] << "\n";
    }
}

Kết quả

1
4
9
16
25
36
49
64
81
100

2. Chế độ Binary Operation

Áp dụng một hàm nhận hai tham số lên các cặp phần tử tương ứng từ hai mảng.

Ví dụ: Nhân tương ứng hai mảng

#include <iostream>
#include <algorithm>

using namespace std;

int multiply(int x, int y) {
    return x * y;
}

int main() {
    int arr1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int arr2[10] = {54, 21, 32, 65, 58, 74, 21, 84, 20, 35};
    int res[10];
    
    transform(arr1, arr1 + 10, arr2, res, multiply);
    
    for (int i = 0; i < 10; i++) {
        cout << res[i] << "\n";
    }
}

Kết quả

54
42
96
260
290
444
147
672
180
350

Lưu ý quan trọng

  • Phạm vi đích phải đủ lớn để chứa kết quả
  • Có thể sử dụng lambda expression thay vì hàm riêng biệt (C++11 trở lên)
  • transform() không thay đổi phạm vi nguồn