string模板类(补充①)

一些string数据方法

方法返回值
begin()指向字符串第一个字符的迭代器
cbegin()一个const_iterator,指向字符串的第一个字符
end()超尾值的迭代器
cend()为超尾值的const_iterator
rbegin()为超尾值的反转迭代器
crbegin()为超尾值的反转const_iterator迭代器
rend()指向第一个字符的反转迭代器
crend()指向第一个字符的反转const_iterator迭代器
size()字符串中的元素数,等于begin()到end()之间的距离
length()同size()
capacity()给字符串分配的元素数。可能大于实际字符数,capacity()-size()的值表示在字符串末尾附加多少字符后需要分配更多的内存
max_size()字符串的最大长度
data()把string对象变为c字符串后的地址
c_str()把string对象变为c字符串后的地址
get_allocator()用于为字符串object分配内存的allocator对象的副本

在这里插入图片描述

image-20220713102024391

一些与内存有关的方法

方法描述
void resize(size_type n)如果n>npos,将引发out_of_range异常;否则,将字符串长度修改为n,如果n<size(),那么截断字符串,如果n>size(),那么使用charT(0)中的字符填充字符串
void resize(size_type n,charT c)如果n>npos,将引发out_of_range异常;否则,将字符串长度修改为n,如果n<size(),那么截断字符串,如果n>size(),那么使用字符c填充字符串
void reserve(size_type res_arg=0)将capacity设为大于或者等于res_arg。由于这将重新分配字符串,所以原来的引用、迭代器和指针都无效
void shrink_to_fit()请求让capacity()的值与size()的值相同
void clear() noexcept删除字符串中所有字符
bool empty() const noexpect如果size()==0那么返回true

字符串存取方法

有四种方法可以访问各个字符,两种方式使用[]运算符,两种方式使用at()方法

原型如下:

reference operator[](size_type pos);
const_reference operator[](size_type pos)const;
referance at(size_type n);
const_referance at(size_type n)const;

第一个[]方法用于像数组那样直接访问string对象对应值,第二个方法令这种方法支持访问const限定的string对象。

string str="123456789";
cout<<str[5];
str[3]='5';
const str1(str);
cout<<str[8];
/*str[5]='4';这样是不允许的*/

at() 方法提供相似的功能,不过其索引是通过函数参数提供的:

string str="123456789";
cout<<str.at(5);
str.at(2)='5';
const str1(str);
cout<<str.at(8);
/*str.at(8)='4';这样是不允许的*/

两种形式除了语法的不同,区别还在于:at() 方法执行边界检查,如果pos>=size(),将引发out_of_range 异常,pos是size_type类型,是无符号的,故而pos值不能为负。

总而言之,at() 方法提供安全性,[] 方法提高执行速度。

还有这样一个函数,他返回字符串的子字符串:

basic_string substr(size_type pos=0,size_type n=npos)const;

它返回一个从pos开始复制n个字符的字符串

string str="I am a string!";
string str1(str.substr(7,6));
str1==string("string");//此表达式为真

C++11增加了下面四种存取方法:

const charT& front()const;
charT& front();
const charT& back()const;
charT& back();

前两个返回string第一个元素,后两个返回string最后一个元素。

基本赋值方法

C++11有五个重载的赋值方法:

basic_string& operator=(const basic_string& str);
basic_string& operator=(const charT* s);
basic_string& operator=(charT c);
basic_string& operator=(basic_string&& str) noexcept;
basic_string& operator=(initializer_list<charT>);

上面五种分别表示:可以把一个string对象赋值给另一个;可以把C字符串赋值给string对象;可以把字符赋值给string对象;可以使用移动语义将一个右值string对象赋值给string对象;可以使用初始化列表进行赋值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_南明_离火_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值