[ターン] 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++)