C ++ STLのunique()関数の詳細な説明

C ++ STLのunique()関数の詳細な説明

1.簡単な説明

unique()関数は隣接する要素のシーケンスリピート削除するために使用され、注意隣接する要素である必要があり(したがって、事前関数の使用は通常ソートする必要があります)、ここでの削除は直接削除されません(イテレーターを返し、関数を再利用します)削除)unique()erase()

2.関数プロトタイプ

iterator unique(iterator it_1,iterator it_2,bool MyFunc);
  • 最初の2つのパラメーターは反復子です。これは、間隔を複製しないことを意味します[it_1, it_2)(他の多くのSTL関数と同じように、左が閉じて右が開いています)。
  • 最後のパラメータはカスタム関数です。ここではあまり紹介する必要はありません。http://www.cplusplus.com/reference/algorithm/unique/を参照してください。
  • 削除部注意[it_1, it_2)におけるリピート隣接要素

3.原則の紹介

実際、原理は比較的単純で、前に繰り返された要素繰り返されていない要素継続的にカバーし、最後の繰り返されていない要素の座標を返します(イテレーター)

実際、これは次のコードと同等です。

iterator My_Unique (iterator first, iterator last)
{
    
    
if (first==last)
    return last;  // 只有一个元素的情况
iterator result = first;  // 从第一个元素开始
while (++first != last)   // 直到最后一个元素
{
    
    
if (*result != *first)    // 找到了一个不重复的元素
	*(++result)=*first;   // 覆盖前面的元素
}
return ++result;          // 返回最后不重复元素的坐标
}

4.使用例

unique()重複排除のための関数の使用

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;


int main()
{
    
    
    int myints[] = {
    
    1,2,3,1,1};
    int len = sizeof(myints)/sizeof(int);
    vector<int> vec(myints, myints + len);
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    for(int x : vec)
        cout << x << ",";
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_44338712/article/details/107876510