LoginSignup
1
0

More than 5 years have passed since last update.

Uniqe関数っぽいものを作ってみる

Posted at

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;
}
1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0