我有2个变量:std::list lst;
和std::list<A*>::iterator lstiter
,其中A是一个类。第一个充满了指向类的指针! B是另一个拥有两个变量的类。
将迭代器放在列表的开头:
void B::iterstart() {
lstiter = lst.begin();
}
void B::iternext() {
iteratend();
lstiter = ++lstiter;
}
void B::iterprev() {
iteratstart();
lstiter = --lstiter;
}
void B::iteratend() {
if (lst.empty())
throw -1;
if (lstiter == lst.end())
throw "Error: end of list\n";
}
void B::iteratstart() {
if (lst.empty())
throw -1;
if (lstiter == lst.begin())
throw "Error: begin of list\n";
}
(我还有一个函数,使指针也指向当前迭代器也指向的列表中的元素。当列表中没有元素并且尝试越过最后一个或第一个元素时,iteratend和iteratstart引发异常元素,这就是我的问题所在!
现在我打电话:
iterstart(); iternext(); iternext(); iternext();
我从没收到消息!(列表结尾)而且我还有其他一些错误,有时我将过程称为prev,但是接下来我会得到过程的返回值! (但我想先尝试解决其他问题)
最佳答案
此lstiter = ++lstiter
是错误的。使用整数可以工作,但是当与复杂的C ++对象一起使用时,由于依赖于增量和复制功能的特定实现,它有时无法正确执行。另外,为什么要这么做呢?您只需要++lstiter
。