赞
踩
目录
1.string是basic_string的一份char类型的类模板
使用形式如 string s; getline(cin,s);
接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
在日常中我们常常会使用字符串来表示一些数据,而在C语言中,字符串是以'\0'结尾的字符的集合,关于字符串的操作在c语言中有着各种str系列的库函数来处理字符串,但有时会因为误用而造成错误,且库函数多不易记住各库函数的的具体操作,因此在c++中提出了string类来解决各种字符串操作
发展出不同的类模板 是为了适应各种不同的环境下的使用,比如要兼容各国的语言,字符串表示各国的语言等,就如编码一样,发展了各种的编码来适应各国的语言
最初的ASCII码
我们知道计算机只能识别机器语言,也就是二进制的,对于要在计算机中存储和表示英文就得有对应的转换,这就用到了ASCII码表将其对应的十进制数字表示为二进制的,存储在计算机中
为了兼容各国的语言与文字,便提出了万国码,将各国文字按照对应的转换数字用二进制存储在计算机中
常用的为UTF-8来转换各国文字
在国内为了更好的兼容,标识和存储汉字便提出了对于汉字的编码
举例:
注:在capacity计算中是不统计'\0'的
使用
1.我们需要了解在vs和g++等不同编译器的扩容情况
- int main()
- {
- //观察扩容情况
- string s;
- size_t sz = s.capacity();
- cout << "making s grow:\n";
- cout << "capacity change:" << sz << endl;
- for (int i = 0; i < 100; i++)
- {
- s.push_back('c');
- if (sz != s.capacity())
- {
- sz = s.capacity();
- cout << "capacity change:" << sz << endl;
- }
- }
-
- return 0;
- }
我们知道每次扩容的代价还是挺大的,要是异地扩容的话 ,还要不断的拷贝数据,释放原空间,代价增加,既然这样的话我们可以在知道需要开多少空间的情况下,使用reserve提前开辟空间,减少扩容,提高效率
- int main()
- {
- //观察扩容情况
- string s;
- s.reserve(100);//提前扩容
- size_t sz = s.capacity();
- cout << "making s grow:\n";
- cout << "capacity change:" << sz << endl;
- for (int i = 0; i < 100; i++)
- {
- s.push_back('c');
- if (sz != s.capacity())
- {
- sz = s.capacity();
- cout << "capacity change:" << sz << endl;
- }
- }
-
- return 0;
- }
对于 resize
1.clear()只是将string中有效字符清空,不会改变底层的空间大小
2.resize在改变元素个数时,如果增多元素个数,可能会改变底层容量的大小,如果减少元素个数,底层空间总大小不变
3.reserve为string预留空间,不改变有效元素个数,当参数小于底层空间总大小时,reserve不会改变容量大小
正向迭代器
简单理解迭代器 就是两个指针如
范围for遍历
- string s3("hello world");
- for (auto ch : s3)
- {
- cout << ch << " ";
- }
- cout << endl;
反向迭代器
使用:
对于上面的这个字符串空格替换还可以再优化为
使用如cout<<s1.c_str()<<endl; cout<<s1<<endl;后面一个打印字符串的所有内容
以上几个只需了解即可,对于 getline需要注意
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。