📌  相关文章
📜  C++ STL中的forward_list :: before_begin()(1)

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

C++ STL中的forward_list :: before_begin()

在 C++ STL 中,forward_list 是一个单向链表容器。它的特点是在插入,删除,添加等操作时具有 O(1) 的时间复杂度。而 forward_list::before_begin() 则是 forward_list 中一个很重要的函数,它返回一个指向单向链表的头部之前的位置的迭代器。

下面是 forward_list::before_begin() 的用法示例:

#include <iostream>
#include <forward_list>

int main ()
{
  std::forward_list<int> mylist = { 10, 20, 30, 40 };

  std::cout << "mylist contains:";
  for (auto it = mylist.before_begin(); it != mylist.end(); ++it)
    std::cout << ' ' << *it;

  return 0;
}

这段代码会输出:

mylist contains: 10 20 30 40

可以看到,在 mylist 中插入默认构造的值为 0 的节点。这是因为 mylist 中前置迭代器(即 before_begin() 返回的迭代器)指向了单向链表的头部的前面,而头部是一个空节点。因此在插入时,类似于在头部之前添加一个节点,这个节点的值为默认构造的值。

std::forward_list::before_begin() 返回的类型是 std::forward_list::iterator 类型,因此可以使用 dereference operator* 和 increment operator++ 来访问链表中的节点。需要注意的是,由于单向链表无法访问上一个节点,因此不能使用 decrement operator--

总的来说,forward_list::before_begin() 是一个非常有用的函数。它可以在单向链表的头部之前插入节点,也可以用来初始化迭代器,以便对单向链表进行遍历。