2011-08-27 101 views
1

C++ - The Complete Reference,作者給我們展示他是如何實現自定義的C++字符串類後的挑戰。摘自書本:如何使用STL實現自定義字符串類?

挑戰: 嘗試使用STL實現StrType(字符串類)。也就是說,使用容器來存儲組成字符串的字符。使用迭代器對字符串進行操作,並使用算法執行各種字符串操作。

我明白這裏的基本概念,但在實施時遇到了困難。我應該爲每個字符做什麼std::vector <char>push_back?字符串操作呢?需要一些幫助。示例代碼將被感激地接受,或者您可以解釋我可以如何實現這一點。

+2

難道你連* *嘗試創建自己的級聯功能?如果您要求其他人爲您徹底解決問題,您將無法學習。 –

回答

2

是,std::vector<char>聽起來像一個偉大的想法。它可以幫你避免編寫自定義析構函數,複製構造函數和複製賦值操作符的麻煩。加上所有的迭代器的成員函數(beginend和CO。)可以直接委託給std::vector<char>版本。

可你給就怎麼做字符串處理一些代碼?如連接?

沒問題,這裏是我會怎麼過載operator+=operator+對於字符串類型:

class StrType 
{ 
    std::vector<char> vec; 

public: 

    // ... 

    StrType& operator+=(const StrType& rhs) 
    { 
     vec.insert(vec.end(), rhs.vec.begin(), rhs.vec.end()); 
     return *this; 
    } 
}; 

StrType operator+(StrType lhs, const StrType& rhs) 
{ 
    lhs += rhs; 
    return lhs; 
} 

有可能的operator+更高效的版本,但你可以明白這一點你自己。

+0

謝謝我想你是對的,但是,你可以給一些代碼如何做字符串操作?如連接? – ApprenticeHacker

+0

當然,請參閱我的更新。 – fredoverflow

+0

最好有const StrType的返回類型。 – Jagannath

0

使用std::vector<char>很可能是在這種情況下使用(隨機訪問迭代器和低開銷,使之成爲一個字符串吸引人的)最好的容器。

std::vector<char> firstString; 
firstString.push_back('A'); 
firstString.push_back('B'); 
std::vector<char> secondString; 
secondString.push_back('X'); 
secondString.push_back('Y'); 

firstString.insert(firstString.end(), secondString.begin(), secondString.end()); 

for(auto it = firstString.begin(); it != firstString.end(); ++it) 
{ 
    std::cout << (*it); 
} 

在這種情況下,這將打印出:ABXY

而且對FredOverflow的回答您的意見,您可以通過以下途徑執行字符串連接。你可以在這裏看到:http://ideone.com/OmdoU

相關問題