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

本文探讨了STL中string(基于basic_string)与vector<char>的区别,尽管它们在数据结构和内存管理上有相似之处,但string提供了额外的字符串操作,如c_str()、数据转换为C-style字符串的功能,以及重载的输入输出流操作符和字符串拼接操作。vector<char>不具备这些特性,不能直接转换为C-style字符串,也无法直接使用cin/cout,且不支持重载的+、+=操作符进行字符串拼接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

转换为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 _Allo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值