And*_*owl 12
这主要是出于历史原因,但不仅如此.
字符串库和STL(由A. Stepanov开发的容器/算法库最终成为C++标准库的一部分)是独立开发的,它们采用了不同的约定.
然而,因为他们最终都汇聚到C++标准库,C++标准确实作出努力,以统一这些语法约定,并允许使用string
s的STL算法,这就是为什么类string
具有成员函数,如begin()
和end()
区别于其他成员函数如substr()
.
除了向后兼容性之外,还有另一个原因string
可以提供成员函数,例如find()
:与容器不同,容器用于访问或操作其元素的通用算法,字符串通常被认为是值本身而不是值的集合(即char
s的序列).因此,将操纵string
值的算法封装到string
类的成员函数中是有意义的.
因此,在其设计中,C++标准库支持string
s 的这两种视图:作为值的集合和值本身.
更新:
你的第一句话"虽然std::vector
和朋友没有它"并不完全正确.至少,如果你不延长std::vector
的朋友范围内std::set
,std::multiset
,std::map
,std::multimap
,std::unordered_set
,和std::unordered_map
(换句话说,几乎所有的C++标准库中的关联容器).
某些数据结构确实在其接口上具有某些通用STL算法的成员函数版本:这要么表明这些算法比那些特定数据结构(例如find()
)的通用对应物具有更高效的实现,或者专用实现是必要的,因为通用算法根本不能应用于那些数据结构(例如std::remove()
,修改容器中的值).
归档时间: |
|
查看次数: |
472 次 |
最近记录: |