摘要:迭代器返回一个迭代器,该迭代器指向字符串结束字符的过去部分。不得取消对其的引用。如果字符串对象是限定的,则函数返回一个迭代器。此值在字符串的成员函数中用作或参数的值时,表示直到字符串结束。
String类介绍
string的文档介绍
一、String的构造方法
string构造方法文档介绍
这是文档对string对的构造方法地描述,以下是对string构造函数地具体说明。
string() 构造空的string类对象,即空字符串
string(const char* s) 用C-string来构造string类对象
string(size_t n, char c) string类对象中包含n个字符c
string(const string&s) 拷贝构造函数
void text() { string str; string s("123456789"); string ss(8, "a"); string st(s); cout << str << endl; cout << s << endl; cout << ss << endl; cout << st << endl;}
箭头标出来的是空字符串,s通过拷贝构造把值传给了str,只不过值空字符串。
二、string容量操作介绍
size 返回字符串有效字符长度
length 返回字符串有效字符长度
capacity 返回空间总大小
empty 检测字符串释放为空串,是返回true,否则返回false
clear 清空有效字符
reserve 为字符串预留空间**
resize 将有效字符的个数该成n个,多出的空间用字符c填充
capacity表示为字符串预留空间的大小这是表示s1的预留空间大小为15而有效字符串长度为9.
empty检测字符串释放为空串当s1不是空串是输出的是0,当执行了clear()情况了字符串时empty检测s1为空串输出为1。
resize 将s1有效字符的个数该成10个输出了size大小为10,size大小表示有效字符串的数。
size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
clear()只是将string中有效字符清空,不改变底层空间大小。
resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t
n, char c)用字符c来填充多出的 元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小
。
三、string类对象的访问及遍历操作
operator[] 返回pos位置的字符,const string类对象调用
begin+ end
begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器
rbegin + rend
begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器
范围for C++11支持更简洁的范围for的新遍历方式
文档介绍:
1.operator[]方式
字符串中指定位置的字符。如果字符串对象是const限定的,则函数返回一个const char&。否则,它将返回一个字符&
通过for循环方式打印出数据这和数组遍历打印数据差不了多少。
2.迭代器
返回一个迭代器,该迭代器指向字符串结束字符的过去部分。
结束字符后面的过去字符是字符串中最后一个字符后面的理论字符。不得取消对其的引用。
由于标准库函数使用的范围不包括其结束迭代器所指向的元素,因此此函数通常与string::begin结合使用,以指定包含字符串中所有字符的范围。
如果对象是空字符串,则此函数返回与string::begin相同的值。
一个迭代器,指向字符串的末尾。
如果字符串对象是const限定的,则函数返回一个const_迭代器。否则,它将返回一个迭代器。
成员类型迭代器和常量迭代器是随机访问迭代器类型(分别指向字符和常量字符)。
void text() { string s1("123456789"); string sss("123456"); for (int i = 0; i < s1.size(); i++) { cout << s1[i] << " " ; } string::iterator it = s1.begin(); while (it != s1.end()) { cout << *it << " "; it++; }}
3.反向迭代器
就是利用迭代器逆向输出string中的数据
string::reverse_iterator it = s1.rbegin(); while (it != s1.rend()) { cout << *it << " "; it++; }
这不是难实现,利用for循环也可以逆向打印数据。
4.范围for
C++新标准提供的范围for语句.这种语句遍历给定序列中个元素并对序列中每一个值执行某种操作,其语法形式是:
for(declaration : expression)
statement
其中,expression 部分是一个对象,用于表示一个序列。declaration 部分负责定义一个变量,该变量将用于访问序列中的基础元素。每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。
此例中通过使用auto关键字让编译器来决定变量o的类型,这里o的类型是char.每次迭代,s1的下一个字符被拷贝给o,因此该循环可以读作“对于字符串str中的每个字符o,”执行某某操作。此例中的某某操作 即输出一个字符,然后换行。
四、string的修改
push_back 在字符串后尾插字符c
append 在字符串后追加一个字符串
operator+= (重点) 在字符串后追加字符串str
c_str(重点) 返回C格式字符串
find + npos(重点) 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置 substr
在str中从pos位置开始,截取n个字符,然后将其返回
push_back只能插入一个字符,而且不能插入字符串,而append不竟能插入字符,而且能插入字符串。
operator+= 在字符串后追加字符串str,这也是字符串修改中最常用的方法。
find:
find的文档介绍
第一个匹配的第一个字符的位置。
如果未找到匹配项,则函数返回字符串::npos。
size_ t是无符号整数类型(与成员类型string::size_t类型相同)。
找到就返回它的位置,找不到返回-1,也有的地方说是npos这里npos意思是一至的。
文档中是这样介绍:
npos是一个静态成员常量值,对于类型为size_t的元素,其值可能最大。
此值在字符串的成员函数中用作len(或sublen)参数的值时,表示“直到字符串结束”。
作为返回值,它通常用于指示不匹配。
此常量的定义值为-1,因为size_t是无符号整数类型,所以它是此类型的最大可能表示值。
substr:
这个例子是把s从第3个字符开始截取到npos也就是字符串末尾。
五、其他方法
operator+尽量少用,因为传值返回,导致深拷贝效率低
拼接字符串
把两个字符串拼接成一个字符串。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/123600.html
摘要:特别是所谓的不需要的引用可能会导致内存泄漏,这意味着程序占用的内存比实际需要的多,从而降低了内存的效率。但是如果我们能够意识到内存泄漏的风险,就可以采取措施将其删除。意外的使用全局变量是导致内存泄漏的一个常见原因。 作者:Bret Cameron翻译:疯狂的技术宅原文:https://medium.com/@bretcamer... 本文首发微信公众号:前端先锋欢迎关注,每天都给你...
摘要:本文已收录修炼内功跃迁之路在诞生之初便提出,各提供商发布很多不同平台的虚拟机,这些虚拟机都可以载入并执行同平台无关的字节码。设计者在第一版虚拟机规范中便承诺,时至今日,商业机构和开源机构已在之外发展出一大批可以在上运行的语言,如等。 本文已收录【修炼内功】跃迁之路 Java在诞生之初便提出 Write Once, Run Anywhere,各提供商发布很多不同平台的虚拟机,这些虚拟机...
在社会化分工、软件行业细分专业化的趋势下,会真的参与到底层系统实现的人肯定是越来越少(比例上说)。真的会参与到JVM实现的人肯定是少数。 但如果您对JVM是如何实现的有兴趣、充满好奇,却苦于没有足够系统的知识去深入,那么可以参考RednaxelaFX整理的这个书单。 showImg(http://segmentfault.com/img/bVbGzn); 本豆列的脉络是: 1. JV...
阅读 2666·2021-11-25 09:43
阅读 2045·2021-11-24 09:39
阅读 1899·2021-11-17 09:33
阅读 2722·2021-09-27 14:11
阅读 1784·2019-08-30 15:54
阅读 3202·2019-08-26 18:27
阅读 1246·2019-08-23 18:00
阅读 1790·2019-08-23 17:53