string类

string类:一种动态类型的顺序表—存储字符类型的元素,在一段连续的空间中
string类中的接口分为以下几个模块
构造与析构
string();
string(const char*);
string(size_t n, char ch);
string(const string& s);
遍历操作
for()+下标
范围for
采用迭代器
begin()
end()
容量相关
size()
capacity()
empty()
resize(size_t n, char ch);
reserve(size_t n);
元素访问相关
operator[] (index)
at(index)
修改
operator+=(ch/const char*/string)/push_back(ch)/insert/erase
特殊操作
c_str()
find(ch, pos=0)
string::npos(静态成员变量)/rfind(ch/const char*/string, pos)
substr(pos, n)

将string类型对象中有效元素个数调整到newsize个
void resize(size_t newsize, char c);
void resize(size_t newsize);
1.将有效元素个数缩小,注意:仅仅是将有效元素个数缩小到newsize个,并不会改变底层容量的大小
newsize <= oldsize
2.将有效元素个数增多:假设原来有效元素个数为oldsize,原来的容量为oldcapacity
newsize > oldsize
newsize <= oldcapacity 直接在源字符串尾部追加newsize-oldsize个C即可
newsize > oldcapacity 扩容,扩容方式与顺序表的扩容方式一致(开辟新空间,拷贝元素,释放旧空间)

扩容:将底层空间容量修改到newcapacity
void reserve(size_t newcapacity)

注意:在扩容期间不会修改有效元素个数

假设:当前容量为oldcapacity
1.newcapacity <= oldcapacity说明需要底层容量缩小
newcapacity > 15 reserve直接忽略
newcapacity <= 15 reserve才会将容量缩小到15个
2.newcapacity > oldcapacity 说明需要底层容量扩增newcapacity个

VS中当用户在构造string类型的对象时,如果有效字符个数小于等于15个时,利用自己内部静态的数组,如果超过15个,则动态开辟空间

1.size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()
2.clear()只是将string中的有效字符清空,不改变底层空间大小。

用push_back()验证string类的扩容机制:
vs----------------P.J.STL-----------1.5倍
linux-------------SGI-----------------2倍

迭代器失效
1.所有可能会引起容量修改的操作
push_back
insert
operator+=()
append()
resize()
reserve()
2.其他方式
erase()
clear()
swap()

解决:在使用之前重新给迭代器赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值