ユーザー入力から作成されたベクトルが降順または昇順のいずれかでソートされていない場合、コードに例外をスローしようとしています。C++例外が期待通りに処理されない
using namespace std;
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
vector <int> vec;
//Let user fill a vector with 12 integers.
//cout << "Please note that input data should be either increasing or decreasing." << endl;
int n = 0;
int size = 0;
while(size < 12) {
cout << "Type integer to add to the vector." << endl;
cin >> n;
vec.push_back(n);
++size;
}
//throw exception if unsorted
try {
if (!((is_sorted(vec.begin(), vec.end())) || (is_sorted(vec.end(), vec.begin())))) {
throw "Input was not sorted.";
}
}
catch(exception &error){
cerr << "Error: " << error.what() << endl;
}
}
私はそれがこの問題とは無関係であることをかなり確信しているので、私は、特定の番号を検索し、コードの残りの部分を、含まれていません。ベクトルに埋め込まれたデータが昇順または降順の場合はすべて問題ありませんが、例外をテストすると、「char const * 'Aborted」のインスタンスをスローした後に呼び出されます。私はここで何が起こっているのか分かりません。私は例外を処理しているか、sort()関数を間違って使用していますか?
'begin()'と 'end()'を入れ替えると、後ろに行く間隔がなくなり、空の間隔が得られます。代わりに 'rbegin()'と 'rend()'を使いたいとします。 –
同じブロック内で例外をスローしてキャッチする意味はありません。代わりに単純な 'if'を使うべきです。 – Mattia72
うわー、非常に多くのかっこ!あなたは 'is_sorted'への呼び出しの周りのものを削除することができます - それらは冗長です。そして、 '!(A || B)'は '!A &&!B'と等価です。これはデモガンの定理を適用して、' if'文の中の式の最も外側の対を取り除くことができます。 –