std::transform creates derived values by applying the same operation to each input element.

transform `std::transform` writes one output value for each input value.
output container The output container must have room for the transformed values before the algorithm writes into it.

Transform Values

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

int main() {
    std::vector<int> base{2, 4, 6};
    int multiplier = 3;

    std::vector<int> scaled(base.size());
    std::transform(base.begin(), base.end(), scaled.begin(),
        [multiplier](int value) {
            return value * multiplier;
        });

    std::cout << "multiplier=" << multiplier << std::endl;
    std::cout << "scaled0=" << scaled[0] << std::endl;
    std::cout << "scaled2=" << scaled[2] << std::endl;
    return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> base{2, 4, 6};
    int multiplier = 2;

    std::vector<int> scaled(base.size());
    std::transform(base.begin(), base.end(), scaled.begin(),
        [multiplier](int value) {
            return value * multiplier;
        });

    std::cout << "multiplier=" << multiplier << std::endl;
    std::cout << "scaled0=" << scaled[0] << std::endl;
    std::cout << "scaled2=" << scaled[2] << std::endl;
    return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> base{2, 4, 6};
    int multiplier = 5;

    std::vector<int> scaled(base.size());
    std::transform(base.begin(), base.end(), scaled.begin(),
        [multiplier](int value) {
            return value * multiplier;
        });

    std::cout << "multiplier=" << multiplier << std::endl;
    std::cout << "scaled0=" << scaled[0] << std::endl;
    std::cout << "scaled2=" << scaled[2] << std::endl;
    return 0;
}
  1. base ← [2, 4, 6], multiplier ← 3, scaled ← [0, 0, 0]

    5int main() {6    std::vector<int> base→ [2, 4, 6]{2, 4, 6};7    int multiplier→ 3 = 3; //@multiplier=2, 589    std::vector<int> scaled→ [0, 0, 0](base[2, 4, 6].size());10    std::transform(base[2, 4, 6].begin(), base.end(), scaled→ [6, 12, 18].begin(),11        [multiplier](int value) {12            return value * multiplier;13        });1415    std::cout << "multiplier=" << multiplier3 << std::endl;16    std::cout << "scaled0=" << scaled[6, 12, 18][0] << std::endl;17    std::cout << "scaled2=" << scaled[6, 12, 18][2] << std::endl;18    return 0;19}
    outputmultiplier=3
    scaled0=6
    scaled2=18
  1. base ← [2, 4, 6], multiplier ← 2, scaled ← [0, 0, 0]

    5int main() {6    std::vector<int> base→ [2, 4, 6]{2, 4, 6};7    int multiplier→ 2 = 2;89    std::vector<int> scaled→ [0, 0, 0](base[2, 4, 6].size());10    std::transform(base[2, 4, 6].begin(), base.end(), scaled→ [4, 8, 12].begin(),11        [multiplier](int value) {12            return value * multiplier;13        });1415    std::cout << "multiplier=" << multiplier2 << std::endl;16    std::cout << "scaled0=" << scaled[4, 8, 12][0] << std::endl;17    std::cout << "scaled2=" << scaled[4, 8, 12][2] << std::endl;18    return 0;19}
    outputmultiplier=2
    scaled0=4
    scaled2=12
  1. base ← [2, 4, 6], multiplier ← 5, scaled ← [0, 0, 0]

    5int main() {6    std::vector<int> base→ [2, 4, 6]{2, 4, 6};7    int multiplier→ 5 = 5;89    std::vector<int> scaled→ [0, 0, 0](base[2, 4, 6].size());10    std::transform(base[2, 4, 6].begin(), base.end(), scaled→ [10, 20, 30].begin(),11        [multiplier](int value) {12            return value * multiplier;13        });1415    std::cout << "multiplier=" << multiplier5 << std::endl;16    std::cout << "scaled0=" << scaled[10, 20, 30][0] << std::endl;17    std::cout << "scaled2=" << scaled[10, 20, 30][2] << std::endl;18    return 0;19}
    outputmultiplier=5
    scaled0=10
    scaled2=30