[ターン] C ++がベクトルを重複排除するための2つの方法

[ターン] C ++がベクトルを重複排除するための2つの方法

このブログから再投稿

最初の方法は、セットの特性を単純に使用することです。コードのこの部分は、コード上で直接、比較的単純です。

#include <iostream>
#include <vector>
#include <set>

using namespace std;


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

2番目の方法は、並べ替え機能と一意の機能を組み合わせることです。

unique()関数は、隣接する繰り返し要素をベクトルの最後に配置し、最初の繰り返し要素に反復子を返し、erase関数を使用して、この要素から最後の要素までのすべての要素を消去します。

したがって、最初に並べ替えて、重複する要素が一緒に積み上げられるようにし、unique()関数を呼び出してから、erase関数を呼び出して重複を削除します。以下のコードを参照してください。

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

上記のコードの
for (auto x : nums)
機能は、コンテナ内のすべての要素を反復することです。各要素の一時的な名前はxであり、これは次のコードと同等です。
for (vector<int>::iterator iter = nums.begin(); iter != nums.end(); iter++)

おすすめ

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