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はコピーする配列であるターゲット配列の開始アドレスであり,同じアドレスを返す.
例:
#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//説明削除しました.後は乱数ですからね