我正在尝试使用迭代器来遍历vector<char*>
c++ 中的 a。我已经构建了一个虚拟程序,它应该从末尾开始,然后在大于 0 的数字上后退(朝向开头,或rend()
),在数字 <0 上前进(朝向结尾,或rbegin()
),然后在 0 上退出. 如果迭代器已经到达任一端并且用户试图进一步,它应该在该端重复元素并且不移动迭代器。我的问题是,如果用户试图跑到最后,而不是这样做,我只会得到一个段错误。这是我的代码:
#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 循环中。已修复