本文實現了c++ stl中的basic_string模板類,當然。通過typedef也就實現了string類和wstring類。限於篇幅,實現**中用到了標準庫的char_traits模板類,本人自己也實現了
char_traits模板類,為此還寫了一篇部落格,在我的部落格裡能夠找到,那裡的**全然能夠用在這裡的basic_string類的實現中,當然,詳細加到**中要稍加修改,以和與basic_string類相關的全域性模板函式相容,如operator >> 模板函式的過載。
經過測試。這裡的是實如今效率上不輸標準庫(與vs2012比對),**凝視還算清晰,並且具有良好的擴充性。能夠以此量身打造自己的精簡版本號string。
好了。廢話不多說了!看**!
還請高手們指教!!!
此檔案我建議命名為local_string.h。還是我一慣的習慣,封裝於名字空間mystd中。
假設要測試**,直接複製以下的**就能夠了,都在乙個檔案裡。
標準庫有的功能。這裡基本上都有!
/*
*看完《stl源**剖析》後就有重寫stl的衝動,這個basic_string的實現還算完整。
標準庫有的功能,這裡基本都有,假設有須要,能夠在此基礎上擴充套件功能。!
以下是乙個簡單的測試程式!
並和標準庫比對執行結果!以驗證正確性。
#include#include#include//clock
#include"local_string.h"
#define std mystd //改為std能夠執行標準庫版本號
//測試可知。結果與標準庫的執行結果一樣
using std::cout;
using std::wcout;
using std::cin;
using std::wcin;
using std::endl;
int main()
{ // 下面是一些測試**!
std::string str;
str = "abcdefghijk"; //11 個字元長度
clock_t start = clock();
//之所以選擇在首部進行插入操作。是為了測試在極端條件下的執行效率。
for(int i = 0; i < 25; ++i)
str.insert(0,str);
//完畢迴圈後。str會變得非常大,大小為 11乘以2的25次方 ,結果為369,098,752個字元長度
clock_t finish = clock();
/* mystd | std
--------------|--------------------
0.348 | 0.435
0.366 | 0.446
0.359 | 0.47
0.392 | 0.46
0.374 | 0.445
能夠看到,我的實現版本號比標準庫略快!
宣告:我的機器是win8系統,vs2012
*/ cout<
望高手批評指正!
!謝謝!
C String類的實現
參考c primer.string類的實現,清翔兔 06,jan.include using namespace std class string string void private char m data inline string string const char str if str m...
C String類的實現
include using namespace std class string string void private char m data inline string string const char str inline string string const string other i...
c string類的實現
友元函式可以轉換左右運算元的順序,而成員函式必須保證左運算元string已經處於正確的形式。include include includeusing namespace std class string friend const string operator const string other1...