【发布时间】:2013-06-18 06:54:14
【问题描述】:
我的代码的基本结构是:
using namespace std;
void recursiveFunction(list <int> &jobs,...){
list<int>::iterator i;
int ii;
//code missing
for(i=jobs.begin(); i != jobs.end(); ++i){
//more code missing
list<int>::iterator tempi(i);
ii=*i;
jobs.erase(tempi);
recursiveFunction(jobs,...);
jobs.insert(i,ii);
}
}
正如我所发现的,任何指向已擦除位置的指针都会失效,因此 i 也会失效。有没有办法以这种方式重新插入工作编号?没有每次递归创建一个新列表的性能损失?
除了列表迭代器之外,还有其他方法可以使用吗?
【问题讨论】:
-
你到底想做什么?在我看来,您试图删除一个元素,然后将其插入到它曾经所在的位置
-
当使用
erase()进行迭代时,您必须使用函数的返回值进行进一步的迭代。 -
在递归调用中所有这些擦除之后,迭代器 i 已衰减,那么为什么不使用 push_back 而不是 insert?
-
同一个列表在多个递归级别被读取,如果没有更高级别两次读取相同的作业,我认为我不能使用 push_back...
标签: c++ list insert iterator erase