[section:transformed transformed]

[table
    [[Syntax] [Code]]
    [[Pipe] [`rng | boost::adaptors::transformed(fun)`]]
    [[Function] [`boost::adaptors::transform(rng, fun)`]]
]

* [*Precondition:] The `value_type` of the range is convertible to the argument type of `fun`.
* [*Postcondition:] For all elements `x` in the returned range, `x` is the result of `fun(y)` where `y` is the corresponding element in the original range.
* [*Throws:] Whatever the copy-constructor of `fun` might throw.
* [*Range Category:] __single_pass_range__
* [*Returned Range Category:] The range category of `rng`.

[section:transformed_example transformed example]
``
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <boost/assign.hpp>
#include <algorithm>
#include <iostream>
#include <vector>

struct double_int
{
    typedef int result_type;
    int operator()(int x) const { return x * 2; }
};

int main(int argc, const char* argv[])
{
    using namespace boost::adaptors;
    using namespace boost::assign;

    std::vector<int> input;
    input += 1,2,3,4,5,6,7,8,9,10;

    boost::copy(
        input | transformed(double_int()),
        std::ostream_iterator<int>(std::cout, ","));

    return 0;
}
``
[endsect]

This would produce the output:
``
2,4,6,8,10,12,14,16,18,20
``
[endsect]


