読者です 読者をやめる 読者になる 読者になる

boost勉強中

boostが楽しい
assignとかlambdaとか便利やわ〜。

// -*- coding: utf-8-with-signature-dos -*-
//==============================================================================

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/assign.hpp>

// lambda/bind.hppと一緒にincludeするとboost::lambdaと競合してusing namespaceできない
// #include <boost/bind.hpp>

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;
using namespace boost::lambda;
using boost::ref;
using boost::assign::operator+=;

int main()
{
    vector<int> num;
    num += 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; // assign

    vector<int> num2;
    auto push_back = (void (vector<int>::*)(const int&))(&vector<int>::push_back);
    for_each(num.begin(), num.end(), bind(push_back, ref(num2), (_1 * 3 + 5))); // bind

    cout << "num2: ";
    for_each(num2.begin(), num2.end(), (cout << _1 << " ")); // lambda
    cout << endl;

    return 0;
}

出力結果

num2: 5 8 11 14 17 20 23 26 29 32

主にvs10で試していますが、vs9でもautoだけ変えれば動きました。
autoはC++11の機能なので。http://ja.wikipedia.org/wiki/C%2B%2B11
もうしばらく遊んでみる。