【发布时间】:2018-07-11 19:52:17
【问题描述】:
我正在尝试确定我可以使用 std list 从列表中删除的最大项目数以获得最小大小。但是,它一直以错误的内存访问而告终。
这是我的递归函数:
int step (list<int> mylist) {
int count = mylist.size();
// Terminations
if (!checkRemaining(mylist)) {
return mylist.size();
}
if (mylist.empty()) {
return 0;
}
//printf("mysize: %d\n", mylist.size());
// Else we do not terminate first
for (auto i=mylist.begin(); i != prev(mylist.end()); ++i)
{
if ((*i + *next(i))%2 == 0) // Problem starts from here, bad access
{
mylist.erase(next(i));
mylist.erase(i);
printf("this size %lu\n", mylist.size());
list<int> tempList = mylist;
for (auto it = tempList.begin(); it != tempList.end(); it++) {
printf("%d ", *it);
}
printf("\n");
int temp = step (tempList);
if (temp < count) count = temp;
}
}
return count;
}
它设法减小到所需的大小,但由于内存访问错误,程序会崩溃。
【问题讨论】:
-
std::list::erase成员函数使迭代器无效。这似乎是问题所在。 -
.erase 有替代品吗?
-
@Wilson 否,但它还会返回下一个迭代器 fromw,您应该在擦除后继续该迭代器。
-
还有一个例子here
标签: c++ recursion linked-list