forward_list C++的迭代程序



我有一个forward_list,我需要保留列表中元素的迭代器,以便在它们满足某些属性时擦除它们。

#include<iostream>
#include<vector>
#include <algorithm>
#include<forward_list>
int main(){
std::forward_list<int> mylist = {0, 10, 20, 30, 40, 50, 60, 70};
std::vector<std::forward_list<int>::iterator> iter;
for(std::forward_list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it){
iter.push_back(it);
}
mylist.erase_after(iter[2]);
iter.erase(iter.begin()+2);

mylist.erase_after(iter[2]);
return 1;
}

第二CCD_ 1不删除任何元素。我观察到我对列表的第三个元素有松散的访问权限(在擦除之后(,为了访问这个元素,我在第二个mylist.erase_after(iter[2]);之前添加了以下代码。

int i=0;
for(auto it= mylist.begin();i<=2;++it,++i){
if(i==2)
iter[2]=it;
}

这是删除列表中的元素后获得访问权限的最佳方式吗?

mylist.erase_after(iter[2])使引用被擦除元素的任何迭代器无效,包括iter[3]。在iter.erase(iter.begin()+2);之后,以前在iter[3]中的无效迭代器现在在iter[2]中。最后,mylist.erase_after(iter[2]);通过访问无效迭代器的方式表现出未定义的行为。

回想一下,erase_after(some_iter)并没有移除mylist.erase_after(iter[2]);0所指向的元素,而是移除它后面的元素(因此是"之后"(。

相关内容

  • 没有找到相关文章

最新更新