vector<char*>
イテレータを使用してC++でaをウォークオーバーしようとしています。私は、最後から開始し、0より大きい数で後方(先頭または)に進み、 0未満の数値rend()
で前方(最後または)に進み、0で終了することになっているダミープログラムを作成しました。 rbegin()
。イテレータがいずれかの端に到達し、ユーザーがさらにステップしようとした場合、イテレータを移動せずに、その端で要素を繰り返す必要があります。私の問題は、それを行うのではなく、ユーザーが最後まで実行しようとすると、セグメンテーション違反が発生することです。これが私のコードです:
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int main(){
vector<char*> vect;
char* tmp;
for (int i=1; i<=5; i++){
tmp = new char[7];
sprintf(tmp, "hello%d", i);
vect.push_back(tmp);
}
vector<char*>::const_reverse_iterator it = vect.rbegin();
int a;
cin >> a;
while (a!=0){
if (a>0){
if (it < vect.rend()){
cout << *(++it) << endl;
} else{
cout << *it << endl;
}
} else{
if (it > vect.rbegin()){
cout << *(--it) << endl;
} else{
cout << *it << endl;
}
}
cin >> a;
}
return 0;
}
誰かが問題を特定できますか?
編集
小さな変更を加えたことを忘れました。tmp
以前のコードは、初期化forループに入力されませんでした。修正されました