我有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

09-20 00:12