passing a transform as a function parameter?

Discussion in 'C++' started by Steven T. Hatton, Aug 13, 2004.

1. Steven T. HattonGuest

If I do:

typedef vector<size_t> v_T;

pair<v_T, v_T> b_T;

b_T bounds(v_T(n), v_T(n)); // if that doesn't work
// std::make_pair(v_T(n), v_T(n));
b_T diff_v(n);
void populate_bounds(&bounds); // all bounds.first <= bounds.second

If I then:

transform(bounds.first.begin(),
bounds.first.end(),
bounds.second.begin(),
diff_v.begin(),
minus<size_t>());

diff_t should get filled with

diff_v == bounds.second - bounds.first

I can then pass diff_v to a function which takes a const &v_T argument. Is
there a way to iliminate diff_v, and simply feed the transform to the
function taking &v_T?

--
STH
Hatton's Law: "There is only One inviolable Law"
KDevelop: http://www.kdevelop.org SuSE: http://www.suse.com
Mozilla: http://www.mozilla.org
Steven T. Hatton, Aug 13, 2004

2. Victor BazarovGuest

Steven T. Hatton wrote:
> If I do:
>
> typedef vector<size_t> v_T;
>
> pair<v_T, v_T> b_T;

Did you mean

typedef std:air<v_T,v_T> b_T;

?

>
> b_T bounds(v_T(n), v_T(n)); // if that doesn't work
> // std::make_pair(v_T(n), v_T(n));
> b_T diff_v(n);

I don't think you can initialise a pair this way. Did you mean

v_T diff_v(n);

??

> void populate_bounds(&bounds); // all bounds.first <= bounds.second
>
> If I then:
>
> transform(bounds.first.begin(),
> bounds.first.end(),
> bounds.second.begin(),
> diff_v.begin(),
> minus<size_t>());
>
> diff_t should get filled with
>
> diff_v == bounds.second - bounds.first
>
> I can then pass diff_v to a function which takes a const &v_T argument. Is
> there a way to iliminate diff_v, and simply feed the transform to the
> function taking &v_T?

Since you didn't clarify how v_T contains the bounds, I would have to dive
into a pool of assumptions, and it's usually wrong. Perhaps you could be
more specific. Otherwise, the generic answer is, "yes, you can do that,
you only need to correctly define the iterator and the functor".

Victor
Victor Bazarov, Aug 13, 2004