赞
踩
本文讲解 string 类中,最为常用的一些函数,string 类中还有一些其他的 操作,本文不一一列举,大家在需要用到时不明白了查文档即可。(要学会查文档)
从本章开始就正式开始学习 各种 STL,就要学会看文档了
不读第一手英文文档,有很多东西是使用翻译器 get 不到的
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,
但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。
函数名称 | 功能说明 |
---|---|
string() | 构造空的string类对象,即空字符串 |
string(const char* s) | 用 C语言 char* 类型字符串 构造string类对象 |
string(const string&s) | 拷贝构造函数 |
void Teststring()
{
string s1; // 构造空的string类对象s1
string s2("hello bit"); // 用C格式字符串构造string类对象s2
string s3(s2); // 拷贝构造s3
}
函数名称 | 功能说明 |
---|---|
size | 返回字符串有效字符长度 |
length | 返回字符串有效字符长度 |
capacity | 返回空间总大小(当前全部空间) |
empty | 检测字符串是否为空串,是返回true,否则返回false |
clear | 清空有效字符 |
reserve | 为字符串预留空间(改变 capacity, 不可改变 size) |
resize ( size_t n, char c ) | 将有效字符的个数该成 n 个,多出的空间用字符 c 填充(可改变 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 和 resize ,本篇博客有细致讲解:string 扩展空间规律 + reserve 的缩容和使用规律 + resize 的使用
函数名称 | 功能说明 |
---|---|
operator[] | 返回 pos 位置的字符,使 string 可以像数组一样访问 |
begin + end | (正向遍历)begin 获取一个字符的迭代器 + end 获取最后一个字符下一个位置的迭代器 |
rbegin + rend | 反过来遍历 |
范围 for 循环 | C++11的语法:底层还是 迭代器begin + end |
at | 功能和 operator[] 一样,但这个会捕获越界异常提醒你 |
string 重载了 operator[] :字符串 string 可以像数组一样遍历
在 string 的库中还重载了一个 const 类型的
因为可能你传过来的字符串是用 const 修饰不能修改
在 库的string 底层类似于这样:(实际上有些差别)
class string
{
public:
char& operator[](size_t i) {
assert(i < _size);
return _str[i];
}
private:
char* _str;
size_t _size;
size_t _capacity;
};
⭐
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。