I've recently started using boost lambda and thought I'd try and use it in places where it will/should make things easier to read.
I have some code similar to the following
std::vector< X * > v;
for ( int i = 0 ; i < 20 ; ++i )
v.push_back( new X() );
and later on, to delete it...
std::for_each( v.begin(), v.end(), boost::lamda::delete_ptr() );
Which neatly tidies up.
However, I thought I'd have a go at "lambda-ising" the population of the vector using lambda... That's then the fireworks started...
I tried..
std::generate_n( v.begin(), 20, _1 = new X() );
but this threw all kinds of compiler errors.
Any ideas which is the best "lambda" way to achieve this.
Thx Mark.
Here's a code snippet that does what you want:
#include <algorithm>
#include <vector>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/construct.hpp>
typedef int X;
int main() {
std::vector<X*> v;
std::generate_n( std::back_inserter(v), 20, boost::lambda::new_ptr<X>() );
std::for_each( v.begin(), v.end(), boost::lambda::delete_ptr() );
}
You might want to consider using boost::ptr_vector though, as using a std::vector with dynamically allocated pointers in an exception safe way isn't easy.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With