QUS:並べ替えられた配列から重複を削除します。ソートされた配列が与えられた場合、各要素が1回だけ表示され、新しい長さが返されるようにします。私たちが望むにもかかわらず、あなたは別の配列のための余分なスペースを割り当てないでください並べ替えられた配列から重複を削除
場所でだけでなく、元の配列を変更することを確認し、新しい長さを返すために
注意、あなたは一定のメモリを搭載した場所でこれを行う必要があります。
私は次のコードを試しましたが、誰かが私が間違っているのを助けることができますか?
#include<iostream>
#include<vector>
using namespace std;
int removeDuplicates(vector<int> &A) {
int m=A.size();
if(m<=1) return m;
vector<int> :: iterator i=A.begin();
vector<int> :: iterator j=A.begin()+1;
vector<int> :: iterator temp;
while(i!=A.end() && j!=A.end())
{
while(j!=A.end() && *i == *j)
{
temp=j;
j++;
A.erase(temp);
}
i=j;
j++;
}
return A.size();
}
int main()
{
vector<int> vec={0,0,0,0,0,0,0,4,4,7,7,7,7,9};
cout<<"ans="<<removeDuplicates(vec);
return 0;
}
このプログラムの結果は何ですか?期待される結果は何ですか?デバッガのコードを一行ずつ進めて何が起こったのか見ましたか? –
ホイールを改造しないでください。 ['std :: unique'](http://en.cppreference.com/w/cpp/algorithm/unique)と[' std :: vector :: erase'](http://en.cppreference.com/w/cpp/container/vector/erase)。 'std :: unique'のリンクは、これがどのように行われるかを示しています。 – NathanOliver
'erase'の呼び出し後、すべてのベクトルのイテレータが無効になりました。あなたはインデックスでもっとうまくいきます。 –