重複する要素を取り除く
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, " "));
}
|

にしお
#3412()
Rating1/1=1.00
これはアレイのuniqの派生問題です。 リストとかアレイという言葉は言語によってまちまちの意味で使われているので、 「配列のようなもの」という漠然とした意味にとって構いません。
[ reply ]