C++でバブルソート

30分プログラム、その726。C++バブルソートを書いてみました。C++を使うのは久しぶりです。
久しぶりすぎてほとんど書けませんでした。ホントは、マージソートを書きたかったんですが、結局バブルソートになりました。あと、最初はイテレータを使って書いてたんですが、結局あきらめました。
あと、Boostを始めて使ったんですが、これすごいですね。

v += 1,2,3;

とか

for_each(v.begin(),v.end(), std::cout << _1 << '\n');

とか書けるんですもん。すごいですよね。

ソースコード

#include <iostream>
#include <algorithm>
#include <vector>
#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/swap.hpp>
#include <boost/assign.hpp>

using namespace std;

// functionは関数の型
// http://www.kmonos.net/alang/boost/classes/function.html
void bsort(vector<int>& v, boost::function<bool (int,int)> f) {
  int size = v.size();
  for(int i = 0; i < size; i++){
    for(int j = 1; j < size - i; j++){
      if(f(v[j],v[j-1])){

	// スワップ
	// http://www.kmonos.net/alang/boost/classes/swap.html
	boost::swap(v[j],v[j-1]);
      }
    }
  }
}

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

  vector<int> v;

  // コンテナへの要素の追加
  // http://www.kmonos.net/alang/boost/classes/assign.html
  v += 1,10,12,0;

  // 無名関数
  // http://www.kmonos.net/alang/boost/classes/lambda.html
  bsort(v, _1 > _2);

  // ホントはstd::sortを使ったほうがラク
  // sort(v.begin(),v.end(), _1 > _2);

  for_each(v.begin(),v.end(), std::cout << _1 << '\n');
  return 0;
}