2011-06-11 89 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的模板庫。