我对reverse iterator with rbegin(), rend() and operator++ of the class string
的实施感兴趣,我在谷歌找不到它,我该怎么办?提前感谢任何帮助或任何链接
答案 0 :(得分:5)
您可以查看实现头文件。 (例如Linux上的/usr/include/c++/4.1.2/string
)。这通常只会吸引真正的肉所在的其他标题,例如bits/basic_string.h
。
我不知道他们住在哪里,例如VC ++,但你通常可以通过创建std::string
,选择它并按F12来获取Intellisense来找到它。
答案 1 :(得分:0)
STL中有reverse_iterator的基本实现。
要归还Iterator
,它会被模板化。
如果你看一个范围,这个想法很简单:
[first, second, .... last]
^ ^
begin end
rend rbegin
与使用此实现的纯反向迭代器相比,完成了额外的工作,因为对于每个解除引用,您需要复制您持有的迭代器,递减它,然后取消引用它。
答案 2 :(得分: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()); }
//...
};
(复制自海湾合作委员会的实施。)