目录
前言
为什么会关注string和vector<char>的区别?
先来说下string这个“类”。
string和vector、list、deque等容器不一样,在STL中并不存在class string{...},它实际上是一个全局类型,通过typedef定义:
也就是说,string实际上是通过basic_string类来实现的,而string则是模板类basic_string的char特例化版本,同样还有针对宽字节的wstring。
然后看看basic_string类:
template <class _CharT, class _Traits, class _Alloc>
class basic_string : private _String_base<_CharT,_Alloc>
{
...
size_type size() const { return _M_finish - _M_start; }
size_type capacity() const { return (_M_end_of_storage - _M_start) - 1; }
...
}
/* string_base 类*/
template <class _Tp, class _Alloc> class _String_base {
...
protected:
typedef simple_alloc<_Tp, _Alloc> _Alloc_type;
/*三个主要的成员*/
_Tp* _M_start;
_Tp* _M_finish;
_Tp* _M_end_of_storage;