C ++文档编辑类迭代器oob

时间:2018-05-13 03:50:50

标签: c++ vector iterator

我仍然是c ++的新手,我需要编写一个类来读取cin的文本输入并根据'。'后面的字符格式化它。

..忽略第一个点并正常打印该行。<将指针指针返回到文档的开头,>将它移动到最后,.p移动到上一行,.n移动到下一行,.k删除当前行。

代码工作得很好,但是在使用.p命令后它仍然不受限制,我无法弄清楚如何修复它。

istream& operator>>(istream& in, Document& d) {
 string S;
 vector<string>::iterator point;
 point = d.end();
 while (in){
 getline(in, S);
     if (S[0] == '.'){
 switch (S[1]){
     case '.' : S.erase(0, 1); d.insert(d.end(), S+'\n'); point = d.end(); break;
     case '<' : point = d.begin(); break;
     case '>' : point = d.end(); break;
     case 'p' : point--; break;
     case 'n' : point++; break;
     case 'k' : d.remove(point); break;
 }
}
else if (point !=d.end()) {d.insert(point, S+'\n'); point++;}
else{d.insert(d.end(), S+'\n'); point=d.end();}
return in;
}

我认为它发生是因为它在istream中运行并且每个新行移动d.end()所以点增量传递它知道它是如何工作的?我仍然要把头包裹在迭代器周围,但是我觉得我一直在这里碰到我的头。

提前感谢您的帮助!

0 个答案:

没有答案