如何在C++中使用STL列表创建循环
如何使用STL列表容器创建一个循环?
你不能。
std::list
有一个开始和结束。对数据结构的所有访问都进行了仔细的控制,以便符合标准的程序无法生成非终止列表。
P.s.我假设面试官实际上打算说“std::list
”而不是“STL名单”。
一个可能的答案是:当多个线程同时操作list
结构时可能会发生这种情况。假设两个线程想要push_back
进入已经形成的list
。如果列表中已经有b
和a
,循环链表可能看起来像:
.--------------------------.
( )
`-> a <-> SENTINEL <-> b <-'
而且一个线程在同一时间的另一个刀片d
插入c
。他们每个人都想要连接到SENTINEL
像这样的背:
a <-> c <-> SENTINEL
a <-> d <-> SENTINEL
然而,最终可能使得一个循环:
.------------.
a. `-. )
`-> c <-> d <-'
<--> SENTINEL <-> b (<-> a)
前向链路的罚款:b -> a -> c -> d
但反过来链接将循环:d -> c -> d
...
这可能是因为SENTINEL的指针正在被读取,取消引用和修改而没有互斥。
能否详细说明一下?我想我不明白你的图。 – 2012-08-11 03:28:46
@KevinHu:我改变了这个例子,并提供了更详细的解释。 – jxh 2012-08-11 04:45:33
这是一个措辞不佳的问题。你应该要求澄清。他们想知道如何遍历'std :: list'吗? – Chad 2012-08-10 16:03:52
这不是我的面试问题。但我相信这不是一个遍历列表的问题。完整的问题实际上会要求你做一个循环,然后检测它。 – 2012-08-10 16:06:23
也许把你想要的代码放入析构函数并创建这些对象的N个列表? – Gir 2012-08-10 16:06:27