如何在C++中使用 STL 列表创建循环

How to create a loop using STL list in C++

本文关键字:STL 列表 创建 循环 C++      更新时间:2023-10-16

这是一个面试问题:如何使用 STL 列表容器创建循环?

我是新手。我搜索了这个问题,没有找到任何问题。如果这是一个老问题,请给我链接并删除这篇文章。

谢谢大家!

如何使用 STL 列表容器创建循环?

你不能。

std::list有始有终。对数据结构的所有访问都受到严格控制,因此符合标准的程序根本无法生成非终止列表。

附言:我假设面试官实际上想说"std::list"而不是"STL列表"。

一个可能的答案是:当多个线程同时操作list结构时,可能会发生这种情况。假设两个线程想要push_back到一个已经形成的list中。如果列表已经有ba,循环列表可能如下所示:

  .--------------------------.
 (                            )
  `-> a <-> SENTINEL <-> b <-'

一个线程插入c同时另一个线程插入d .他们每个人都想像这样连接到SENTINEL的背面:

a <-> c <-> SENTINEL
a <-> d <-> SENTINEL

但是,最终可能会形成一个循环:

   .------------.
a. `-.           )
  `-> c <-> d <-'
             <--> SENTINEL <-> b (<-> a)

转发链接很好:b -> a -> c -> d
但是反向链接将循环:d -> c -> d...

发生这种情况是因为 SENTINEL 的指针正在被读取、取消引用和修改,而不会相互排斥。