2016-10-06 14 views
0

私は、ベクトルの要素が昇順でない場合、その要素を並べ替える関数を作ろうとしています。私はこれを書いたが、私はそれをコンパイルするとき、私は得る:なぜstd :: out_of_rangeエラーが発生しますか?

はのインスタンス投げた後に呼び出さ終了「のstd ::のout_of_range」何を():ベクトル:: _ M_range_check

誰かが何であるかを教えてもらえ私の機能に間違っている?ありがとう。

void reorder(vector<double>& orderA) 
{ 
    for (unsigned int i = 0; i < orderAngle.size(); ++i) 
    { 
     temp = orderA.at(i); 
     orderA.at(i) = orderA.at(i+1); 
     orderA.at(i+1) = temp; 
    } 

    return; 
} 
+7

I + 1が範囲外である - その上で1.、コードは何それが必要行いません。あなたは完全な吹き出しソート機能が必要です。 – Incomputable

+0

あなたのカウンターが 'size -1'に等しいとき、それは存在しない最後の要素と次の要素を取得しようとします。あなたのループ関数は 'i

+0

関数の最後に常に' return'を書いてください。書き込みを忘れた場合、関数は永遠に実行されます。 –

答えて

0

の1- Olzhasのコメントで述べたように、私はorderAngle.size(になると、あなたのコードが)範囲外になりますので、あなたは、ループのためにあなたを変更する必要があります。

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

2あなたのアルゴリズムは、達成したいことを達成していません。

3-実際に複素数のベクトルをソートするための独自のアルゴリズムを記述する必要はありますか? 次のコードのようなものを使用することについてどのように:I = orderAngle.size()とき

sort(vec.begin(), vec.end(), [](double x, double y) { 

    return (x < y); 
}); 
関連する問題