std::transform can use a lambda to build changed values from an input range.

transform `std::transform` applies a callable to each input value and writes the result to an output range.

Transform With Lambda

scale
transform_with_lambda.cpp
Replay: real traced execution (multi-file project)
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    int scale = 3;

    std::vector<int> values{1, 2, 4};
    std::vector<int> scaled(values.size());

    std::transform(values.begin(), values.end(), scaled.begin(), [scale](int value) {
        return value * scale;
    });

    for (int value : scaled) {
        std::cout << "scaled=" << value << std::endl;
    }

    return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    int scale = 2;

    std::vector<int> values{1, 2, 4};
    std::vector<int> scaled(values.size());

    std::transform(values.begin(), values.end(), scaled.begin(), [scale](int value) {
        return value * scale;
    });

    for (int value : scaled) {
        std::cout << "scaled=" << value << std::endl;
    }

    return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    int scale = 5;

    std::vector<int> values{1, 2, 4};
    std::vector<int> scaled(values.size());

    std::transform(values.begin(), values.end(), scaled.begin(), [scale](int value) {
        return value * scale;
    });

    for (int value : scaled) {
        std::cout << "scaled=" << value << std::endl;
    }

    return 0;
}
  1. scale ← 3, values ← [1, 2, 4], scaled ← [0, 0, 0]

    5int main() {6    int scale→ 3 = 3; //@scale=2, 578    std::vector<int> values→ [1, 2, 4]{1, 2, 4};9    std::vector<int> scaled→ [0, 0, 0](values[1, 2, 4].size());1011    std::transform(values[1, 2, 4].begin(), values.end(), scaled→ [3, 6, 12].begin(), [scale](int value) {12        return value * scale;13    });
  2. for (int value : scaled)

    pass 1 of 3
    15for (int value3 : scaled[3, 6, 12]) {16    std::cout << "scaled=" << value3 << std::endl;17}
    outputscaled=3
    All 3 passes — pass 1 is the card above
    passvalue
    13
    26
    312
  3. return 0;

    19    return 0;20}
  1. scale ← 2, values ← [1, 2, 4], scaled ← [0, 0, 0]

    5int main() {6    int scale→ 2 = 2;78    std::vector<int> values→ [1, 2, 4]{1, 2, 4};9    std::vector<int> scaled→ [0, 0, 0](values[1, 2, 4].size());1011    std::transform(values[1, 2, 4].begin(), values.end(), scaled→ [2, 4, 8].begin(), [scale](int value) {12        return value * scale;13    });
  2. for (int value : scaled)

    pass 1 of 3
    15for (int value2 : scaled[2, 4, 8]) {16    std::cout << "scaled=" << value2 << std::endl;17}
    outputscaled=2
    All 3 passes — pass 1 is the card above
    passvalue
    12
    24
    38
  3. return 0;

    19    return 0;20}
  1. scale ← 5, values ← [1, 2, 4], scaled ← [0, 0, 0]

    5int main() {6    int scale→ 5 = 5;78    std::vector<int> values→ [1, 2, 4]{1, 2, 4};9    std::vector<int> scaled→ [0, 0, 0](values[1, 2, 4].size());1011    std::transform(values[1, 2, 4].begin(), values.end(), scaled→ [5, 10, 20].begin(), [scale](int value) {12        return value * scale;13    });
  2. for (int value : scaled)

    pass 1 of 3
    15for (int value5 : scaled[5, 10, 20]) {16    std::cout << "scaled=" << value5 << std::endl;17}
    outputscaled=5
    All 3 passes — pass 1 is the card above
    passvalue
    15
    210
    320
  3. return 0;

    19    return 0;20}