unique と unique_copy の使用方法です.
#include <stdio.h>
#include <math.h>
#include <vector>
#include <functional>
#include <algorithm>
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;
vector<double>::iterator it, end;
// 初期設定
printf("**初期状態 v1**\n");
v1.push_back(3.0);
v1.push_back(4.1);
v1.push_back(4.95);
v1.push_back(5.0);
v1.push_back(8.0);
v1.push_back(5.0);
v1.push_back(5.0);
v1.push_back(7.0);
for (it = v1.begin(); it != v1.end(); it++)
printf(" %f", *it);
printf("\n");
printf("**初期状態 v2**\n");
copy(v1.begin(), v1.end(), inserter(v2, v2.begin()));
for (it = v2.begin(); it != v2.end(); it++)
printf(" %f", *it);
printf("\n");
// v1 の重複要素を削除
printf("v1 の重複要素を削除\n");
end = unique(v1.begin(), v1.end()); // 注意
for (it = v1.begin(); it != end; it++)
printf(" %f", *it);
printf("\n");
printf(" v1 の size : %d (注意)\n", v1.size());
// 初期設定後,v1 の重複要素を削除(述語使用)
printf("初期設定後,v1 の重複要素を削除(述語使用)\n");
copy(v2.begin(), v2.end(), v1.begin());
end = unique(v1.begin(), v1.end(), Equal()); // 注意
for (it = v1.begin(); it != end; it++)
printf(" %f", *it);
printf("\n");
printf(" v1 の size : %d (注意)\n", v1.size());
// 初期設定後,v1 の重複要素を削除し,v2 にコピー
printf("初期設定後,v1 の重複要素を削除し,v2 にコピー\n");
copy(v2.begin(), v2.end(), v1.begin());
unique_copy(v1.begin(), v1.end(), v2.begin());
printf(" v1");
for (it = v1.begin(); it != v1.end(); it++)
printf(" %f", *it);
printf("\n");
printf(" v2");
for (it = v2.begin(); it != v2.end(); it++)
printf(" %f", *it);
printf("\n");
// v1 の重複要素を削除し,v2 にコピー(述語使用)
printf("v1 の重複要素を削除し,v2 にコピー(述語使用)\n");
unique_copy(v1.begin(), v1.end(), v2.begin(), Equal());
printf(" v1");
for (it = v1.begin(); it != v1.end(); it++)
printf(" %f", *it);
printf("\n");
printf(" v2");
for (it = v2.begin(); it != v2.end(); it++)
printf(" %f", *it);
printf("\n");
return 0;
}
(出力)
**初期状態 v1**
3.000000 4.100000 4.950000 5.000000 8.000000 5.000000 5.000000 7.000000
**初期状態 v2**
3.000000 4.100000 4.950000 5.000000 8.000000 5.000000 5.000000 7.000000
v1 の重複要素を削除
3.000000 4.100000 4.950000 5.000000 8.000000 5.000000 7.000000
v1 の size : 8 (注意)
初期設定後,v1 の重複要素を削除(述語使用)
3.000000 4.100000 4.950000 8.000000 5.000000 7.000000
v1 の size : 8 (注意)
初期設定後,v1 の重複要素を削除し,v2 にコピー
v1 3.000000 4.100000 4.950000 5.000000 8.000000 5.000000 5.000000 7.000000
v2 3.000000 4.100000 4.950000 5.000000 8.000000 5.000000 7.000000 7.000000
v1 の重複要素を削除し,v2 にコピー(述語使用)
v1 3.000000 4.100000 4.950000 5.000000 8.000000 5.000000 5.000000 7.000000
v2 3.000000 4.100000 4.950000 8.000000 5.000000 7.000000 7.000000 7.000000