C++のunique()、unique_copy()の使い方
1445 ワード
uniqueとunique_copyはC++のSTLテンプレートに属し、ヘッダファイルはalgorithm
機能:
重複する隣接する重複する要素を除去します.つまり、2つの要素が同じで隣接していない場合は除去されません.
uniqueは重複する要素を削除せずに一番後ろに置いたので、元はどれだけの要素なのか、やり直した後にどれだけの要素なのか、削除した要素を保存しました.
unique_copyは、削除した要素を別の配列に再配置し、削除した要素を保存しません.
したがって、一般的に使用される前に、配列をソートします.
使用方法:
Unique(begin,end)、beginは開始位置、endは終了位置、アドレスを返します.
unique_copy(begin,end,tar_begin),beginは元の配列の開始アドレス,end元の配列の終了アドレス,tar_beginはコピーする配列であるターゲット配列の開始アドレスであり,同じアドレスを返す.
例:
出力:
uniquelen=51 2 3 3 4 5 3#//最後に出力された3は、彼と隣接している34 5 3//説明が削除されていないため、後ろに置いてあるだけです.次はunique_copylen=61 2 3 4 5 3 2004323541 667813577-2 200422642//説明削除しました.後は乱数ですからね
機能:
重複する隣接する重複する要素を除去します.つまり、2つの要素が同じで隣接していない場合は除去されません.
uniqueは重複する要素を削除せずに一番後ろに置いたので、元はどれだけの要素なのか、やり直した後にどれだけの要素なのか、削除した要素を保存しました.
unique_copyは、削除した要素を別の配列に再配置し、削除した要素を保存しません.
したがって、一般的に使用される前に、配列をソートします.
使用方法:
Unique(begin,end)、beginは開始位置、endは終了位置、アドレスを返します.
unique_copy(begin,end,tar_begin),beginは元の配列の開始アドレス,end元の配列の終了アドレス,tar_beginはコピーする配列であるターゲット配列の開始アドレスであり,同じアドレスを返す.
例:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll k, p;
int main () {
int a[] = {1, 2, 2, 2, 3, 3, 4, 5, 5, 3};
int b[] = {1, 2, 2, 2, 3, 3, 4, 5, 5, 3};
int len = unique(a, a+10) - a;
printf("unique
len = %d
", len);
for(int i = 0; i < 10; i++)
{
if(i == len) puts("##");
printf("%d ", a[i]);
}
printf("
unique_copy
");
int c[10];
int d = unique_copy(b, b+10, c) - c;
printf("len = %d
", d);
for(int i = 0; i < 10; i++)
{
printf("%d ", c[i]);
}
printf("
");
return 0;
出力:
uniquelen=51 2 3 3 4 5 3#//最後に出力された3は、彼と隣接している34 5 3//説明が削除されていないため、後ろに置いてあるだけです.次はunique_copylen=61 2 3 4 5 3 2004323541 667813577-2 200422642//説明削除しました.後は乱数ですからね