このプログラムの問題点を教えてもらえますか? ベクトル配列がこれらのすべての条件を満たしている場合は、「はい」と表示されます。配列要素は昇順にソートされません。 配列には異なる要素が含まれています。 すべての配列要素は1〜nの値を持ちます。 "いいえ"の場合 if(bSort)の行に到達すると、プログラムは異常終了します。 イテレータのインクリメントに問題はありますか?ベクトルイテレータを使用するとプログラムが異常終了する
#include <iostream>
#include <string>
#include <bits/stdc++.h>
using namespace std;
std::string solve(vector <int> &a, int n) {
vector<int> visited (n);
int i=0;
for(std::vector<int>::iterator it = a.begin(); it != a.end(); ++it) {
i++;
if((it+1)!=a.end() && (*it > *(it+1)))
{
bSort = false;
}
if(std::find(visited.begin(), visited.end(), *it)!=visited.end())
{
return "No";
}
else
{
visited[i] = *it;
}
if(*it <= 0 || *it > n)
{
return "No";
}
}
if(bSort)
return "No";
else
return "Yes";
}
int main() {
int q;
cin >> q;
for(int a0 = 0; a0 < q; a0++){
int n;
cin >> n;
vector<int> a(n);
for(int a_i = 0; a_i < n; a_i++){
cin >> a[a_i];
}
std::string result = solve(a,n);
cout << result << endl;
}
return 0;
}
問題は、次の入力のみで起こっているように見える:
1
30
18 8 24 20 7 17 5 9 26 21 25 12 11 15 30 13 19 16 22 10 14 1 3 29 23 2 6 28 4 27
そして、デバッガを使用してクラッシュをキャッチすると、それは何を伝えますか?あなたのコードのどこでそれが起こりますか?次に、関係するすべての変数の値は何ですか?イテレータはどこに向いていますか? –
'#include' - これをしないでください。適切なヘッダーファイルを含めます。 –
PaulMcKenzie
[よくある質問はなぜ#ビット/ stdC++ .h?]でないといいですか?(https://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h) 。しかし、 'using namespace std;と一緒に使用すると、コードには標準ライブラリ全体が含まれるだけでなく、標準ライブラリ全体がグローバルな名前空間に引かれます。数十万の識別子があります。 'reverse'は予期しない結果のためにあなたのコードで定義された識別子と競合するかもしれません。 – user4581301