📜  C++ STL中的forward_list :: clear()和forward_list :: erase_after()(1)

📅  最后修改于: 2023-12-03 14:39:51.850000             🧑  作者: Mango

C++ STL中的forward_list :: clear()和forward_list :: erase_after()

简介

forward_list 是 C++ STL 中的单向链表。forward_list::clear()forward_list::erase_after() 是两种清除 forward_list 中元素的方法。forward_list::clear() 会删除整个链表上的所有节点,而 forward_list::erase_after() 只会删除指定位置之后的节点。

使用方法
forward_list::clear()
#include<forward_list>
using std::forward_list;

int main(){
  forward_list<int> mylist {1, 2, 3};
  mylist.clear(); //清空整个链表
  return 0;
}
forward_list::erase_after()
#include<forward_list>
using std::forward_list;

int main(){
  forward_list<int> mylist {1, 2, 3, 4, 5, 6};
  auto it = mylist.before_begin(); //获取链表首节点前面的位置
  ++it; //将it移动到第一个节点的位置
  mylist.erase_after(it); //删除节点2
  return 0;
}
forward_list::erase_after()forward_list::clear()的区别
  • forward_list::erase_after()只清除指定位置后的节点,而 forward_list::clear()清除整个链表。
  • forward_list::erase_after()需要迭代器找到要删除节点的前一个节点的位置,而 forward_list::clear()不需要迭代器,操作简单。
注意事项
  • forward_list::erase_after()中需要注意指定位置为空的情况,否则会出现运行时错误。
  • 执行 forward_list::erase_after() 删除节点时,需要保证该节点存在并且不是最后一个节点。否则会出现未定义的行为。
结论

forward_list::clear()forward_list::erase_after() 是清除 forward_list 中元素的两种方法。它们的设计目标不同,可以根据情况选择使用。在使用 forward_list::erase_after() 删除节点时,需要注意保证该节点存在并且不是最后一个节点。