C++にはUniqe関数という便利なものがあるよう。
例えば以下に二つの配列があるとして、

int a[5] = { 3,2,5,7,2 };
int b[5] = { 6,2,3,5,3 };

Uniqe関数に入れると以下のような配列が返ってくる。

c[2,3,5,6,7];

今回はそんなUniqeっぽい感じのものを作ってみた(配列渡せない色々アレだけど)
まあ実際は仕事で必要に迫られたから作ってみただけだけど

以下、ソース

main.cpp
#include <stdio.h>
#include <stdlib.h>

void uniqe(int *a,int alen,int *b,int blen) {
    //結果格納用配列、0で初期化
    //本当は可変(vector)とかがいいんだろうけど、今回は固定
    int c[10] = {};
    int work[10] = {};

    int i, j;
    int tmp;
    int cnt;

    for (i = 0;i < alen;i++) work[i] = a[i];
    for (i = alen;i < (alen + blen);i++) work[i] = b[i - blen];

    //一つ目の配列の並び替え
    for (i = 0;i < (alen+blen);i++) {
        for (j = (alen+blen) - 1;j > i;j--) {
            if (work[j] < work[j - 1]) {
                tmp = work[j];
                work[j] = work[j - 1];
                work[j - 1] = tmp;
            }
        }
    }
    cnt = 0;
    for (i = 0;i < (alen + blen);i++) {
        if (i <= 0) {
            c[i] = work[cnt];
            cnt++;
        }else {
            if (c[i - 1] < work[cnt]) {
                c[i] = work[cnt];
                cnt++;
            }else if(cnt>(alen+blen)){
                c[i] = -1;
            }else {
                i--;
                cnt++;
            }
        }
    }
    for (i = 0;i < (alen + blen);i++) printf("[%d]", c[i]);printf("\n");
}

int main() {
    //今回はあらかじめ配列数が分かっているものとする
    int a[5] = { 3,2,5,7,2 };
    int b[5] = { 6,2,3,5,3 };

    int c[10];

    int i;

    for (i = 0;i < 5;i++) printf("[%d]", a[i]);printf("\n");
    for (i = 0;i < 5;i++) printf("[%d]", b[i]);printf("\n");

    uniqe(&a[0],5,&b[0],5);

    system("pause");
    return 0;
}
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.