2016-12-31 8 views
-1

この単純なコードを作成して、ベクトルの要素を削除およびソートしました。私はそれを何度もチェックしていますが、ソートと削除のアルゴリズムはどちらも個別に実行すると正しいですが、要素を削除してからベクトルを降順で並べ替えると問題があります。プログラムはゴミを '0'私が昇順で並べ替えるとうまくいきます。 ご協力いただければ幸いです。ありがとうございました。 は、ここでは、あなたの並べ替え一部とoff-by-oneエラーを持っているプログラム1C++でベクトルの要素を削除およびソートする

#include<iostream> 
#include<vector> 
#include<algorithm> 
using namespace std; 
int main() 
{ 
    bool flag = 1; 
    int size = 5,delind; 

    vector <int> v1; 
    v1.resize(size); 

    for(int i = 0; i<size; i++) 
    { 
     cout<<"\nenter a no. "; 
     cin>>v1[i]; 
    } 

    // index of the element to be deleted 
    cout << "\nEnter the index of no. to delete: "; 
    cin >> delind; 

    for(int i = delind; i < size; i++) 
    { 
     v1[i] = v1[i+1]; 
    } 
    --size; 
    v1.erase(v1.begin()+size); 

    for(int i =0; i < size; i++) 
    { 
     cout << endl << endl << v1[i]; 
    } 
    cout << "\n sorting"; 
    // sorting 

    while (flag == 1) 
    { 
     flag = 0; 

     for(int i = 0; i < size; i++) 
     { 
      if(v1[i] < v1[i+1]) // works fine with if(v1[i]>v1[i+1]) 
      { 
       flag = 1; 
       swap(v1[i],v1[i+1]); 
      } 
     } 
    } 

    for(int i = 0; i < size; i++) 
    { 
     cout << endl << endl << v1[i]; 
    } 
    return 0; 
} 
+0

あなたは、単に 'v1.erase(v.begin()+ delind)を行うことができます。 std :: sort(v.begin()、v.end()); ' – Jarod42

+0

あなたの問題を伝えるステートメントやステートメントで使用されている変数の値など、デバッグセッションから詳細を投稿してください。また、期待値と実際の値/振る舞いについて述べる。 –

+0

@ Jarod42これは、ベクトルをトラバースする方法を学ぶ練習と思われます。ライブラリ関数を使用してもこれは成立しません。ライブラリにまだ実装されていない教育学に適したおもちゃの問題を思いつくのは難しいです。 – Barmar

答えて

1

のサンプルランのイメージです。次の行ではこの時点size

for(int i = 0;i<size;i++) 
{ 
    if(v1[i]<v1[i+1]) // works fine with if(v1[i]>v1[i+1]) 
    { 
    flag = 1; 
    swap(v1[i],v1[i+1]); 
    } 
} 

4であり、そしてv1.size()もforループi 4.ある通常のように0から3に進みます。しかし、あなたはv1[i+1]を使用しているので、ループはv1[4]にアクセスしようとします。これは範囲外であり、見ているガベージ値を与えます。ちょうどあなたのループ境界を修正し、それを修正する

for (int i = 0; i < size - 1; i++) 
+0

単に 'std :: sort'を使うだけです。 – Jarod42

+0

しかし、要素を削除するとすでにサイズが1減らされていますので、値はすでに3です。オマダ – Waleed

+0

@waleed 'size'は5で始まり、次に1ずつ減少するので、4でなければなりません'size'はおそらく何かを印刷してみてください。 – Omada

関連する問題