2011-05-12 75 views
35

(當我說STL,我談論的是圍繞容器,迭代算法和仿函數模板庫)。
,這個問題就認爲一個std::string大多如同普通的容器後,腦,用通過他們的迭代(例如transformsortfind等)beginend功能(包括迭代器),一個size功能和使用所有那些對於在容器上的工作正常STL算法的可能性/範圍內。std :: string是STL的一部分嗎?

但是,它同時不是容器本身,因爲它不適合存儲任意數據的容器圖片。此外,它主要通過成員函數對所包含的數據進行操作,如substr,find_first_of等,而真正的容器不會這樣做,並讓算法處理它。

此外,cplusplus reference site和C++標準沒有列出std::string連同真實容器,但在一個不同的類別。
但是,在SGI's STL site,basic_string(因此string typedef)與其他容器和basic_string reference site指出它屬於「容器」類別。

現在我的問題是,string實際上是STL的一部分還是它本身是一個獨特的庫?
如果它現在屬於STL,它是否與Stepanov開發的原始STL有所不同?

+9

誰在乎STL在這一點上,除了歷史的好奇? – ildjarn 2011-05-12 02:02:32

+4

@ildjarn:嗯,我喜歡積累知識。 :P另外,看到那個''歷史''標籤? :)我只是喜歡這樣的東西,所以我要求它。 – Xeo 2011-05-12 02:03:53

+1

啊,公平的,我實際上沒有看到'history'標籤: - ] – ildjarn 2011-05-12 02:04:19

回答

25

不,不是真的。是的,有點。

There are varying definitions of "the STL",包括:

  • 實際HP/SGI STL,原始庫,這些部分的C++標準庫的基礎上。他們包括容器,迭代器和算法。字符串分別是而不是這是其中的一部分。

  • 基於SGI STL庫的C++標準庫的各個部分:容器,迭代器和算法。仍然沒有字符串。

  • 所有的C++標準庫。這個定義在邏輯或現實中絕對沒有任何依據,但如果遵循,則包括std::string

注意實際的STL已發展成因爲C++進行了標準化(大約13年前,記不清了),他們已經向後採用了一些認爲走進了標準,就像琴絃的東西。這是而不是意味着它們最初在1998年出現......但他們現在出於「兼容性」的原因。


摘要

的STL是容器,算法和迭代器。

字符串和流被採用爲C++ 98,然後向後 - 採用現代SGI STL。

字符串是否爲「STL的一部分」取決於您遵循邏輯和原因,還是調用標準庫「STL」。

希望這會有所幫助。

+0

只是一個小調:至少是它最初是分發的,HP STL實際上* did *包含了一個'bstring'(基本字符串)類(不被誤認爲'basic_string'),但我記得它真的只在那裏,所以他們不需要處理在簡單的演示程序中使用C風格的字符串(但他們顯然不想處理每個編譯器都有自己獨特的字符串類)。 – 2016-11-03 20:39:19

2

它確實是STL的一部分。而std :: string只是basic_string typedef。它是用字符串語義進行數據存儲的容器,專用的(不是用C++「專業化」的含義:))。 雖然不知道斯捷潘諾夫。 值得一提的是,STL是「標準模板庫」,不僅是容器子部分。這包括算法,流和一些特徵。

+0

@Xeo:哼?流,算法和迭代器正是STL爲標準改編的唯一東西。 – 2011-05-12 02:18:14

+0

@Tomalak:哦,溪流。現在我把它當作IOstreams讀取,也許是因爲你起初在你的其他答案中也有錯誤。> _>「 – Xeo 2011-05-12 02:21:30

+0

@Xeo:區別是...? – 2011-05-12 02:22:03

9

這沒有真正的答案。一方面,std::string完全獨立於其他集裝箱開發。另一方面,它已經足夠滿足隨機存取容器的所有要求。你是否選擇將它歸類爲「STL」的一部分完全取決於你 - 最後,它只是指出了「STL」沒有一個單一的,一致同意的定義以及突然出現的機會獲得清晰的含義是很遙遠的(很好地說)。因爲人們用它來表示至少三種不同的東西 - 但是,不幸的是,沒有更好的縮寫來定義更好的意思,所以STL仍然在使用中,並且,可能會無限期地繼續這樣做(並繼續阻礙交流)。

相關問題