find_of_first と find_end の使用方法です.
#include <stdio.h>
#include <math.h>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
// 誤差の範囲で同じか否かのチェック
class Equal : public binary_function<double, double, bool>
{
public:
result_type operator() (first_argument_type a, second_argument_type b)
{
return (result_type)((fabs(a-b) < 0.1) ? 1 : 0);
}
};
int main()
{
vector<double> v1, v2, v3;
vector<double>::iterator it;
// 初期設定
printf("**初期状態 v1**\n");
v1.push_back(3.5);
v1.push_back(5.01);
v1.push_back(4.0);
v1.push_back(4.95);
v1.push_back(4.05);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %f", *it);
printf("\n");
printf("**初期状態 v2**\n");
v2.push_back(5.0);
v2.push_back(7.0);
for (it = v2.begin(); it != v2.end(); it++)
printf(" %f", *it);
printf("\n");
printf("**初期状態 v3**\n");
v3.push_back(5.0);
v3.push_back(4.0);
for (it = v3.begin(); it != v3.end(); it++)
printf(" %f", *it);
printf("\n");
// 検索
it = find_first_of(v1.begin(), v1.end(), v2.begin(), v2.end(), Equal());
if (it != v1.end())
printf("%f が見つかりました\n", *it);
else
printf("見つかりませんでした\n");
it = find_end(v1.begin(), v1.end(), v3.begin(), v3.end(), Equal());
if (it != v1.end())
printf("%f が見つかりました\n", *it);
else
printf("見つかりませんでした\n");
return 0;
}
(出力)
**初期状態 v1**
3.500000 5.010000 4.000000 4.950000 4.050000
**初期状態 v2**
5.000000 7.000000
**初期状態 v3**
5.000000 4.000000
5.010000 が見つかりました
4.950000 が見つかりました