stl::lower_boundって便利

intのポインタを使ってlower_boundをやってみました。

返り値はイテレーターってことで、intのポインタなわけです。

#include <algorithm>
#include <deque>
#include <iostream>
using namespace std;

int main()
{
  unsigned char *tmp;

  tmp = (unsigned char*)(new int[10]);

  for( int i = 0; i < 10; i++ ){
	((int*)tmp)[i] = 10 + i;
  }

  for( int i = 0; i < 10; i++ ){
	cout << ((int*)tmp)[i] <<  " ";
  }
  cout << endl;


  int* a = lower_bound( ((int*)tmp), ((int*)tmp) + 10, 11);
  cout << "a = " << *a << endl;
  cout << "a - tmp = " << a - (int*)tmp << endl;
  

  return 0;
}

g++だとこれでOKでした。

でも、Visual Studio2003だと、コンパイルエラー…

lower_boundの第4引数にint型用の比較関数を作り、ポインタを渡さないとダメでした…。