迭代器指向错误元素的列表

时间:2013-12-05 19:55:39

标签: c++ list iterator

我有两个变量:std::list lst;std::list<A*>::iterator lstiter,其中A是一个类。 lst充满了指向班级的指针! 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,但我接下来得到程序的返回值! (但我想先尝试解决其他问题)

1 个答案:

答案 0 :(得分:1)

lstiter = ++lstiter错了。使用整数可能有效,但是当与复杂的C ++对象一起使用时,它并不总是正确执行,因为它取决于增量和复制函数的具体实现。另外,你为什么要这样做?您所需要的只是++lstiter