C ++ Document edit класса iterator oob - PullRequest
0 голосов
/ 13 мая 2018

Я все еще очень плохо знаком с 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 (), поэтому приращение точки проходит там, где он знает, так ли это работает?Я все еще должен обернуть голову вокруг итераторов, но определенно чувствую, что я воткнулся головой в стену здесь.

Заранее благодарю за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...