(一)string类
一.常见接口:
1.string():构造空的string类对象
2.string(const char* s):用字符串s来构造对象
3.string(size_t n,char c):string类对象中包含n个字符c
4.string(const string& s):拷贝构造
5.string(const string& s,size_t n):从s中的第n+1个字符开始往后来构造新的对象
例:
void test() {
string s1("hehe");
cout << s1 << endl;
s1.append("wo");
cout << s1 << endl;
string s2("hehheheheheh", 3);
string s3(10,'k');
string s4;
cout << s2 << endl;
cout << s3 << endl;
cout << s4 << endl;
}
运行结果:
二.常用容器
1.size_t size()const :返回字符串有效字符的长度
2.size_t length()const:返回字符串有效字符的长度
3.size_t capacity()const:返回总空间大小
4.bool empty()const:检测字符串是否为空串,是返回true,否返回false
5.void clear():清空有效字符
6.void resize(size_t n,char c):将有效字符的个数改成n个,多出的空间用字符c填充
7.void resize(size_t n):将有效字符的长度改成n个,多出的空间用0填充
8.void reserve(size_t n):为对象申请一段大于等于n的空间,就增长方式看编译器是怎么操作的。
注意:resize不改变空间,reserve改变空间(只增大,不减小,因为减小后如果右要扩,开销比较大)
例:
string s1("hehe");
cout << s1 << endl;
cout << s1.size() << endl;
cout << s1.capacity() << endl << endl;
s1.resize(20);
cout << s1.size() << endl;
cout << s1.capacity() << endl;
执行结果:
三.访问操作
[ ]——与数组相似,采用下标访问
for(int i=0;i<s1.size();i++){
cout<<s1[i]<<" ";
}
这样就将该字符串按每一个字符进行打印。
运行结果:
四.迭代器
上述将字符串按照每一个字符进行输出也可以用迭代器进行操作。
1.正向迭代器
迭代器的定义格式:
std::string::iterator 变量名 ;
string::iterator it1 = s1.begin();
while (it1 != s1.end()) {
cout << *it1 << " ";
++it1;
}
cout << endl;
运行结果:同上。
2.反向迭代器
std::string::reverse_iterator 变量名;
string::reverse_iterator rit1 = s1.rbegin();
while (rit1 != s1.rend()) {
cout << *rit1 << " ";
++rit1;
}
cout << endl;
运行结果:
3.const迭代器 (遍历const对象)
std::string::const iterator 变量名;
std::string::const everse_iterator 变量名;
注意:
1.以上迭代器的实现类似于指针。
2.迭代器不局限于以上几种。
3.非const迭代器可以对对象进行读与写操作。
4.迭代器的作用区间是左闭右开的
例:
string s1("hehe");
cout << *(s1.begin()) << endl;
cout << *(s1.end()-1) << endl;
运行结果:
即begin所指向的位置就是字符串的首元素的位置,但是end所指向的位置是有效元素最后一个位置的后一个位置——‘\0’