2011-06-11 56 views
2

我有一些混淆真假问题 我想任何人都回答他们,并证明答案对我来说,因为我已经做了搜索STL是C++核心的一部分吗?

1 - STL是C的核心的一部分++编程语言

2 - 的std :: string是STL (I猜T)

3的一部分 - 迭代器的一个目的是连接容器和算法(I猜T)

4 - 列表元素按顺序存储在内存中。 (我猜F)

5-矢量元素顺序存储在内存中。 (我猜F)

+3

你的意思是“STL”是什么_exactly_?人们松散地使用它来表示稍微不同的事情,正确回答您的问题取决于同意“STL”的含义。 – 2011-06-11 08:02:57

+1

不错的问题。我的答案是T,T,T,F ?, T – 2011-06-11 08:03:12

+2

对于5的回答为真 – Zuljin 2011-06-11 08:03:29

回答

5

(1),(2)都依赖于你的定义。 “STL”在技术上不是标准C++的一部分,但其中足够大的部分被改写成原来的标准,名称被卡住了。但是,是的,模板化容器通常被认为是STL是官方标准C++库的一部分。 “核心”可能是一个延伸;一个编译器实际上可以让它们脱离独立实现,但是你几乎永远不会发现自己为独立实现编写代码,所以区别并不重要。

(3) 他们是否有其他用途? 是的,这是一个目的。正如Steve Jessop在下面指出的那样,他们还将像流一样的东西连接到算法上,这些东西可以被迭代而不需要真正的容器。

(4)您是指std::list?那你是对的。除非你想玩语义;它们按顺序存储,但可能不连续。 (5)在98年出版的原始标准中,这应该是可能的。在'03'的修改标准中,这被改为yes。在这两种情况下,来自(4)的语义参数也可以应用

+0

回答你在(3)中的修辞问题是“是”。它们还用于将算法与可迭代但不是容器的东西(如流)连接起来;-)所以这是一个目的,但不是唯一的目的。 – 2011-06-11 08:28:19

+0

@Steve:够公平的,我已经忘记了那些。 – 2011-06-11 08:32:28

+0

同样作为历史的一点,我认为'string'不是STL第一版本的一部分,而是在SGI被完成/稳定/放弃/无论他们称之为什么之前被SGI纳入STL。当然,它是目前文档形式的一部分(http://www.sgi.com/tech/stl/)。因此,在STL的“标准C++”定义中“技术上不属于标准C++”的部分,“string”处于。 – 2011-06-11 08:34:09

2

这里是我的答案:

False 
True 
True 
False 
True 
0

我的答案:

  1. 真正的 - 你不能有C++ STL没有
  2. 真 - 这是记录如此无所不在
  3. 真 - 声音合理
  4. 假 - 不,它的链表
  5. 真 - 是的,它是一个基于阵列的列表
+0

你必须小心定义。问题在于STL已经进入了常用的用途,但并没有达到标准。从技术上讲,STL是在标准和标准使用STL的大块(但不是全部)之前定义的。所以在技术上STL不是标准的一部分。请参阅原始STL文档所在的www.sgi.com/tech/stl/(由STL的创建者编写)。在这里你会找到Rope(和其他类),但这不是C++标准的一部分(尽管它(绳子)将会很快)。 – 2011-06-11 15:07:02

3

我认为ALS给出的答案是正确的。更详细地说明你的第一个问题 - 从在C书思考++由Bruce Eckel的 -

有经常有点C++标准库中的容器和算法的混淆,并称为STL实体。标准模板库是当他在1994年春季在加利福尼亚圣地亚哥举行的会议上将他的图书馆提交给C++标准委员会时使用的Alex Stepanov(当时在惠普工作)的名字。该名称被卡住了,特别是在惠普决定将其提供给公众下载。同时,委员会将其整合到标准C++库中,进行了大量更改。 STL的开发继续在Silicon Graphics(SGI;参见http://www.sgi.com/Technology/STL)。 SGI STL在许多细微点上偏离了标准C++库。因此,虽然这是一种流行的误解,但C++标准并未“包含”STL。它可能有点混乱,因为标准C++库中的容器和算法与SGI STL具有相同的根(通常是相同的名称)。在这本书中,我会说:“标准C++库”或“标准库容器”或类似的东西,将避免术语“STL”。

+0

虽然你的答案并不包括所有问题,但它是一个有趣的信息,所以+1 – 2011-06-11 08:12:05

+0

我没有回答所有问题,因为我在第一句话中提到我认为ALS给出的答案是正确的。谢谢你提出了我的答案:) – Sumod 2011-06-11 08:15:15

0
  1. 它是一个标准库的一部分,但其实施不在标准范围内。
  2. 可能是
  3. 可能是肯定的,但他们的主要目的是抽象的程序员一些容器实现和概括所有集合
  4. 没有,这并不保证!95 100,这是不是在你实现
+1

(5):它保证自C++ 03,23.2.4/1,“ 矢量的元素连续存储,这意味着...” – 2011-06-11 08:29:58

+0

是的,你是正确 - 我已经解决了这个问题。谢谢 – 2011-06-11 09:36:19

0

std :: string是而不是标准模板库的一部分。字符串,STL和其他一些其他的东西共同构成了C++标准库。 STL包含容器,迭代器,算法和函数对象。它具有特定的含义,因为它具有特定的来源:SGI的模板库。