2010-10-04 58 views
2

我對reverse iterator with rbegin(), rend() and operator++ of the class string的執行感興趣,我在google找不到它,我該怎麼辦呢?在此先感謝任何幫助或任何鏈接實現字符串類

回答

5

您可以查看實施頭文件。 (例如,Linux上的/usr/include/c++/4.1.2/string)。這通常只是將真正的肉所在的其他頭部的負載拉入,如bits/basic_string.h

我不知道他們在哪裏居住,例如, VC++,但通常你可以通過創建一個std::string來獲得Intellisense,選擇它並按下F12。

+0

對於VC++,它的東西,如C:\ Program Files文件\微軟的Visual Studio 9.0 \ VC \ include(只需搜索標題名稱)。 – alxx 2010-10-04 12:04:45

0

在STL中有一個基本的實現reverse_iterator

它被Iterator模板化以被恢復。

的想法很簡單,如果你看一個範圍:

[first, second, .... last] 
^      ^
begin      end 
rend      rbegin 

有額外的工作完成後,使用此實現與純反向迭代,因爲對於每個解引用,你需要複製你持有的迭代器將其遞減,然後對其進行解引用。

0

雙向迭代器的反向迭代在std::reverse_iterator模板中實現。

反向迭代器爲std::string實現並不需要超過:

template <xxx> 
class basic_string 
{ 
public: 
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator; 
    typedef std::reverse_iterator<iterator> reverse_iterator; 

    reverse_iterator rbegin() { return reverse_iterator(this->end()); } 
    const_reverse_iterator rbegin() const { return const_reverse_iterator(this->end()); } 
    reverse_iterator rend() { return reverse_iterator(this->begin()); } 
    const_reverse_iterator rend() const { return const_reverse_iterator(this->begin()); } 
    //... 
}; 

(複製從GCC的實現)