2016-12-15 5 views
0

私はC++を学んでいます。私は最初の問題に遭遇しました。私はVisual StudioとC++ 11を使用しています。これはコードですソート関数の値を置き換えるときの問題

cout << "Enter 5 numbers to add." << endl; 
for (int i(0); i < 5; ++i) { 
    int x; 
    cin >> x; 
    intList.push_back(x); 
} 
for (int item:intList) { 
    sort(begin(intList), end(intList)); 
    cout << item << " "; 
    total += item; 
} 
cout << endl; 
cout << "Your total is " << total << endl; 

あなたが分かるように、5番の数字を入力して追加します。 coutを使うと、ベクトルの内容を正しく出力します。並べ替え線を追加するとすぐに問題が発生しました。これは、正しい順序で配置しても、最小値を最初の値に置き換える点を除いて、ベクトルを正しくソートします。例:また

Enter 5 numbers to add. 87 95 61 43 2 87 43 61 87 95 Your total is 373

追加の質問、ベクトルを反復するitem::intList最高/効率的な方法を使用しています。 これは明白な解決策であると確信しています。ありがとう。

答えて

3

ソートの呼び出し位置を変更して、forループの外側に配置する必要があります。

現在のところ、あなたのソートは、あなたが観察した効果を引き起こしているイテレータを無効にしています(最初の呼び出しではそれ以降はノーオペレーションです)。

(合計を計算するためにベクトルを並べ替える必要はないことをご存じでしょうか?)

+0

その作業!私は反復子を無効にすることについて少し不明で、なぜそれがソートの最初の値にのみ影響するのですか。 – John

+0

私はベクトルを学びたいので、私はソートしています。このようなエラーがあると、私は学ぶのに役立ちます。 – John

+0

本質的に後続のソートは効果を持ちません。そして、Googleのiterator invalidationを実行します。 – Bathsheba

関連する問題