2009-08-21 44 views
4

basic_string類顯然是作爲通用容器設計的,因爲除了c_str()函數外,我在其規範中找不到任何文本特定的函數。出於好奇,你有沒有使用容器類來存儲人類可讀的字符數據?std :: basic_string的使用

我問這個問題的原因是因爲人們經常不得不做出一般或特定的選擇。設計師們選擇將std::basic_string課程作爲一般課程,但我懷疑它是否以這種方式使用。

+0

你是什麼意思的「文本」? – 2009-08-21 09:07:53

+0

不是我,只有字符或wchar或TCHAR – kenny 2009-08-21 09:10:16

回答

4

它被設計爲一個字符串類(因此,例如,length()和所有這些幾十個查找函數),但在STL引入到std lib後,它是配備的也是一個STL容器(因此size()和迭代器,<algorithm>使所有查找功能成爲冗餘)。

雖然它的主要目的是存儲字符。使用除POD之外的任何內容都不能保證能夠工作(並且不起作用,例如,在使用Dinkumware的std庫時)。此外,除charwchar_t之外,必要的std::char_traits不需要用於其他任何內容(儘管許多實現都伴隨着基本模板的合理實現)。

在原始標準中,該類不需要將其數據存儲在連續的內存中,但是這已經隨C++ 03而改變。

總之,它主要用作字符容器(a.k.a.「string」),其中「字符」的定義相當廣泛。

我曾經使用過的「最瘋狂」是用於通過使用不同的字符類型來存儲不同的編碼字符串。這樣,不同編碼的字符串即使使用相同的字符大小(ASCII和UTF-8)也不兼容,例如,賦值會導致編譯時錯誤。

+0

這個變化發生在C++ 03中。 – 2009-08-21 12:05:19

+0

@ltcmelo:謝謝! – sbi 2009-08-21 17:36:01

1

是的 - 我已經實現了'unsigned int'的狀態機。存儲/比較狀態basic_string已被使用

+0

天哪,那一定是一個非常複雜的狀態機 – 2009-08-21 09:12:45

+0

@Dewfy:在這種情況下,'std :: basic_string'優於'std :: vector'的優點是什麼? – sbi 2009-08-21 09:48:39

+0

@sbi好處僅僅是語義 - 使用concatentaion over + = – Dewfy 2009-08-21 11:49:21

相關問題