challenge 重複する要素を取り除く

与えられたリストxsの中から、 2回以上出現するものを全部取り除いてください。

サンプル入力
[3, 1, 4, 1, 5, 9, 2, 6, 5]
サンプル出力
[3, 4, 9, 2, 6]

これはアレイのuniqの派生問題です。 リストとかアレイという言葉は言語によってまちまちの意味で使われているので、 「配列のようなもの」という漠然とした意味にとって構いません。

Posted feedbacks - C++

STLを使用。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <iterator>
#include <algorithm>

template <typename ForwardIterator>
ForwardIterator only_unique(ForwardIterator beg, ForwardIterator end)
{
    while (beg != end)
    {
        ForwardIterator new_beg = beg; ++new_beg;

        ForwardIterator new_end = std::remove(new_beg, end, *beg);

        if (new_end != end) // removed some elements
        {
            end = std::copy(new_beg, new_end, beg); // remove *beg
        }
        else
        {
            beg = new_beg;
        }
    }

    return end;
}

int main()
{
    int a[] = {3, 1, 4, 1, 5, 9, 2, 6, 5};

    int* p = only_unique(a, a + sizeof(a) / sizeof(*a));

    std::copy(a, p, std::ostream_iterator<int>(std::cout, " "));
}

Index

Feed

Other

Link

Pathtraq

loading...