2012-05-23 19 views
3

我正在閱讀一本C++教程書籍,作者說大多數C++編譯器都包含一個String類庫,但即使它存在,也建議您創建自己的String類。不幸的是,作者沒有說明原因。有人不同意/同意,爲什麼?C++:是否建議創建自己的String類?

我使用Xcode和提供的String類對我來說似乎很好,但是再次,我只使用它幾個小時,所以我不知道這些限制。

在此先感謝。

+9

不要說你應該創建你自己的String類,標準的類將會很好。 –

+3

這本書多少歲? –

+0

「std :: string」不夠好嗎?讓一個人享受樂趣總是很有趣,但我不認爲這是有益的。 – chris

回答

6

聽起來像你有一本舊書。

C++標準庫包括std::string類,您應該使用該類,而不是發明自己的並修復在廣泛使用的庫中已經遇到並修復的錯誤。

因爲你是一個初學者,是的,你應該在實施你自己的過程中擺動,因爲它會教你很多。只是不要在任何'真實'的項目中使用它。

+0

實際上,STL沒有包含std :: string。 std :: string在STL被添加到標準庫時被砸碎了很多,以適應STL範例,但STL沒有,也沒有包含STL範例。 –

+0

@CrazyEddie:我一直認爲他們是,但我不知道現實稍微複雜一些。我在這裏找到了一個SO貼子:http://stackoverflow.com/questions/5972546/is-stdstring-part-of-the-stl –

+0

雖然它不完全是'std :: string',但一些分佈STL確實包含了一個'bstring'(基本字符串)。我記得,亞歷山大斯捷潘諾夫說,它只是想保留一些簡單的例子,儘管簡單。 –

2

建議創建自己的String類

我相信筆者建議創建自己的String類,如良好的編程工作,以發展自己的技能。

這將是荒謬的(至少可以這樣說)暗示創建自己的String類實際生產代碼或者非學術碼

3

C++沒有一個String類。但有一個std::string類涵蓋了基本的字符串功能,並保證由標準存在。要使用它,您需要#include <string>

如果您發現自己需要比std::string中提供的更多功能,則可以隨時添加對該字符串進行操作的免費函數。還有第三方字符串實現(MS的CString,RogueWave的RWCstring),但是我個人認爲它們非常有用,如果你只是在做基本的東西。

1

標準庫的std::string類在字符串類中缺少很多常用設施,包括分割字符串,與正則表達式匹配,轉換爲整數等等。我認爲完全重寫std::string類不是一個好主意(除非它基本上與您的需求不兼容),但將std::string課程分類以提供其中一些功能將會很好。

+0

只要確保不引入任何其他字段。否則,如果您嘗試「刪除」指向子類實例的std :: string指針,則會發生內存泄漏。 – someguy

+0

我沒有downvote,但它值得。 –

+2

'std :: string'缺少這些功能,因爲它們不屬於字符串類的一部分。他們可以(也很容易)實現爲免費功能。 –

0

您可能想要創建自己的字符串類有一些原因,例如您可能希望創建一個不可變的字符串類,其中的函數經過優化用於創建新的衍生字符串,而不是修改現有的字符串,因爲它們有時可以更好地播放多線程代碼。但是,如果你正在閱讀一本初學者的書,那麼這當然不是你需要做的事情,反正至少應該重新考慮三次。

正如人們所說,std :: string是99.9%的東西使用的東西。