2017-09-11 16 views
0

私のプログラムは数字の入力を読み込んで順番に並べます。出力に見られるように。 アルゴリズムライブラリを使用しないで、ソートして繰り返しデータを取り除きました。ただし、データ値が繰り返される場合、ベクトルの最後の値は出力されません。 .eraseを間違って使用していますか?何も値が繰り返されていない.erase(C++)を使用した論理エラー

void remove_repeated(int size, vector<int>& num_vec){ 
    for(int i = 0; i < num_vec.size(); i++){ 
     if(num_vec[i]==num_vec[i+1]){ 
      num_vec.erase((num_vec.begin()+i)); 
     } 
    } 
} 

出力:値が繰り返され

    **Welcome to the HW Reading Program** 
Please, enter your HW:1-10 

Do Problems: 1, 2, 3, 4, 5, 6, 7, 8, 9,and 10 

出力:あなたはベクトルからインデックスiの要素を消去した後

    **Welcome to the HW Reading Program** 
Please, enter your HW: 1-10,1-3 

Do Problems: 1, 2, 3, 4, 5, 6, 7, 8,and 9 
+1

A)MVCE B)インデントを修正します。 TIA。 – Borgleader

+2

これはあなたが投稿した無関係なコードの多くです。シンプルな 'main'プログラムを投稿し、ハードコーディングされた値を繰り返したベクトルを埋め込み、' remove_repeated'を呼び出して、その動作を確認することができます。並べ替えは、あなたが持っている問題とは関係ありません。 – PaulMcKenzie

+0

@Borgleader A)私は自分の能力を最大限引き出すためにそれを修正しました。 B)私のインデントのどの部分が受け入れられないのですか? – Pouya

答えて

4

は、次の要素がありますインデックスiではなく、インデックスi+1にあります。また、あなたはi+1に比較するとき、あなたのループはこのように見えるように持っている。すなわち、境界の外に出ないように注意してくださいする必要があります。

for(int i = 0; i < num_vec.size()-1;){ 
    if(num_vec[i]==num_vec[i+1]){ 
     num_vec.erase((num_vec.begin()+i)); 
    } else { 
     i++; 
    } 
} 

はまた、あなたが標準ライブラリが提供しているものを使用することを検討すべきです。 setには固有の要素のみが含まれているか、 erase + uniqueを使用できます(詳細は hereなどを参照してください)。

関連する問題