目录
编辑
一,string简介
二,string的使用
1.string对象的构造方式
2.string的遍历
1.for普通遍历
2.迭代器的方式遍历
3.string中的函数
一,string简介
要学习string就要先知道string是个啥。string是个啥呢?string其实就是标准库里面的一个容器,一个数据结构。记住,这是一个标准库里面的容器,但是不属于STL里面。关于string首先你要先了解以下几点:
1.string其实可以简单的理解为一个管理字符串的数组。
2.string的头文件是string.h。
3.string的原型是basic_string<char>是一个类模板模板,只不过是被tepdef成了string。
二,string的使用
1.string对象的构造方式
string对象的构造方式分为两种:
1.无参构造
string s1;
这就像定义一个对象一样。
2.有参的构造
string s2("hello world!"); string s3(s2); string s4 = s3; string s5 = "hello world!";
有参构造可以用到“=”赋值操作符,也是拷贝的作用。
2.string的遍历
1.for普通遍历
在讲string的遍历之前就要先讲到string这个类里面有的[ ] 字符重载和size()函数。[ ]字符重载让string的数据能像数组一样用下标访问,size()函数则可以让string取到最后一个字符的下标。所以,string也能像数组一样遍历:
for (int i = 0;i < s5.size();i++) { cout << s5[i] << " "; }
2.迭代器的方式遍历
在string这个类里面还支持着两种迭代器:
1.正向迭代器:iteractor,2.反向迭代器:reiverse_iterator
先来看看正向迭代器:
要使用正向迭代器,就要先知道string里面的两个函数:begin()和end()。这两个函数可以让我们取到字符开头的地址和字符结束的地址。所以使用正向迭代器方式如下:
string::iterator it = s5.begin();//因为iterator是string这个类里面的,所以要用::突破类域来访问使用。 while (it != s5.end()) { cout << *(it) << " "; it++; }
反向迭代器:
要想使用反向迭代器首先就要先知道rbegin()和rend()两个函数。这两个函数和begin()以及end()一样都是取字符串地址的。但是这两组函数取的地址是反的。反向迭代器的使用方式如下:
string::reverse_iterator it = s5.rbegin(); while (it != s5.rend()) { cout << *(it) << " "; it++; } cout << endl;
小技巧:
1.auto
因为使用迭代器时it的前面都要加上很长的类型,所以在这时我们便可以使用auto来对it的类型进行推导从而实现遍历:
auto it = s5.begin(); while (it != s5.end()) { cout << *(it) << " "; it++; } cout << endl; auto it = s5.rbegin(); while (it != s5.rend()) { cout << *(it) << " "; it++; } cout << endl;
2.for语法糖
如果还想再偷一下懒就可以使用for语法糖:
for (auto ch : s5) { cout << ch << " "; }
3.string中的函数
1.拷贝函数:string (拷贝对象,起始位置,拷贝个数)
cout << s5 << endl; string s6(s5, 6, 4); cout << s6 << endl;
结果:
补充:当然,如果你想要打印某个字符后面的全部字符的话便可以:
string (拷贝对象,起始位置,npos),npos的值是size_t -1。
cout << s5 << endl; string s6(s5, 6, s5.npos); cout << s6 << endl;
结果:
2.clear函数与capacity函数。
clear函数是一个清理数据的函数,但是不会销毁内存。而capacity函数就是一个显示容器容量的函数。如:
cout << s5 << endl; cout << "容量:"<<s5.capacity() << endl; cout << s5 << endl; s5.clear(); cout << "清理数据后:"<<s5 << endl; cout << "容量:" << s5.capacity() << endl;
结果:
今天的内容就到这里了。