STL源码分析:浅析string和vector<char>的区别

目录

前言

转换为C-style字符串

重载输入输出流操作符

重载+、+=操作符


前言

      为什么会关注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;
                                
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值