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;
}