| Gavin Doughtie on 15 Aug 2003 20:52:34 -0000 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| [ALACPP] compact, insane example code |
// OK, this compiles and runs. boost::lambda is INSANE!
// Can anybody make it even more STL/boost exotic? Perhaps initializing the string vector??
#include <algorithm>
#include <numeric>
#include <string>
#include <iostream>
#include <vector>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
using namespace std;
using namespace boost::lambda;
string uppercase(const string& input)
{
string result(input);
transform(result.begin(), result.end(), result.begin(), ::toupper);
return result;
}
// Non boost::lambda version for comparison
// ostream& operator<<(ostream& str, const vector<string>& rhs)
// {
// copy(rhs.begin(), rhs.end(),
// ostream_iterator<string>(rhs, "\n"));
// return str;
// }
// Very groovy boost::lambda version
ostream& operator << (ostream& str, const vector<string> & rhs)
{
for_each(rhs.begin(), rhs.end(), str << _1 << "\n");
return str;
}
int main(int, char**)
{
char* badNameArray[] = {"one", "two", "three"};
vector<string> badNames(&badNameArray[0], &badNameArray[3]);
vector<string> goodNames;
transform(badNames.begin(), badNames.end(), back_inserter(goodNames), ::uppercase);
// transformFunc could also be written with lambda somehow, but yechh
int theCount(accumulate(goodNames.begin(), goodNames.end(), 0, _1 + bind(&string::size, _2)));
string theAccumulatedString(accumulate(goodNames.begin(), goodNames.end(), string(""), _1 += _2));
cout << theCount << " total characters in all strings, accumulated from:" << endl << theAccumulatedString << endl;
cout << "badNames: " << badNames << endl;
cout << "goodNames: " << goodNames << endl;
return 0;
}
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp