2012-08-10 87 views
0

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

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

谢谢大家!

+0

这是一个措辞不佳的问题。你应该要求澄清。他们想知道如何遍历'std :: list'吗? – Chad 2012-08-10 16:03:52

+0

这不是我的面试问题。但我相信这不是一个遍历列表的问题。完整的问题实际上会要求你做一个循环,然后检测它。 – 2012-08-10 16:06:23

+0

也许把你想要的代码放入析构函数并创建这些对象的N个列表? – Gir 2012-08-10 16:06:27

回答

2

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

你不能。

std::list有一个开始和结束。对数据结构的所有访问都进行了仔细的控制,以便符合标准的程序无法生成非终止列表。

P.s.我假设面试官实际上打算说“std::list”而不是“STL名单”。

1

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

.--------------------------. 
(       ) 
    `-> 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的指针正在被读取,取消引用和修改而没有互斥。

+1

能否详细说明一下?我想我不明白你的图。 – 2012-08-11 03:28:46

+0

@KevinHu:我改变了这个例子,并提供了更详细的解释。 – jxh 2012-08-11 04:45:33