目录
一.string类简介
二.string类的常用成员接口
1.string类对象的构造函数接口
2. string类对象的容量操作接口
std::string::size
std::string::length
std::string::empty
std::string::clear
std::string::resize
std::string::reserve
3.string类对象的访问及遍历操作接口
std::string::operator[]
4. string类对象中字符串的修改操作接口
std::string::operator+=
一.string类简介
- string是表示字符序列的类(只适用于单字节字符类型)。
- string类的接口与常规容器的接口基本相同
- string类是basic_string类模板的一个char类型的实例,string是宏定义的类名:
typedef basic_string<char, char_traits, allocator> string
- 使用string类时,必须包含#include<string>,string类定义在命名空间std中
二.string类的常用成员接口
1.string类对象的构造函数接口
string主要的构造函数有四个重载:
#include <string> #include <iostream> using std::cin; using std::cout; using std::endl; using std::string; int main() { string a; 调用无参构造函数 string b("hello world"); 调用形参为const char* 的构造函数 string c(b); 调用string的拷贝构造函数,用b去拷贝构造c return 0; }
- 监视窗口中的size指的是string对象存储的字符串的有效字符个数(也是可以被访问到的元素个数)(存储的有效数据的个数)
- 监视窗口中的capacity指的是当前string对象的存储容量(大于或等于size)
- string对象可以根据实际情况自动调整存储容量,用户也可以自行调用相关接口来调整其容量
- allocator是供string对象使用的空间配置器(内存池)
2. string类对象的容量操作接口
- size()和length()
std::string::size
size_t size() const;
std::string::length
size_t length() const;
这两个接口的功能是一样的,使用size会更好(因为其他容器也是用size来获取有效数据个数的) (const修饰的是this指针)
- empty()和clear()
std::string::empty
bool empty() const;
std::string::clear
void clear();
- empty()的功能是检测string中存储的是否为空字符串(无有效字符,size为0),empty不会改变string的字符串内容,也不会改变其存储空间大小(capacity)
- clear()的功能是将string中有效字符个数置为0(size置为0),但是不改变其存储空间大小(capacity不变)
- resize接口
string的resize接口有两个重载
std::string::resize
void resize (size_t n); void resize (size_t n, char c);
- void resize (size_t n)的功能是将string的有效字符串长度(size)调整为n个(n若大于原来string的有效字符长度(size),则多出的有效字符用'\0'来填充)(注意n小于string原本的有效字符长度(size)时,不会改变string的容量capacity)。
- void resize (size_t n, char c)的功能是将string的有效字符串长度(size)调整为n个,如果n大于string原本的有效字符长度(size)则多出的有效字符用字符c来填补(注意n小于string原本的有效字符长度(size)时,不会改变string的容量capacity)
- reserve接口
std::string::reserve
void reserve (size_t n = 0);
reserve的功能是将字符串的存储容量capacity预设为n(注意reserve只能扩容不能缩容,当n小于string原capacity大小时,该函数不会改变capacity)
如果预先知道字符串要存储的有效字符个数,最好先用reserve预设好string的容量以避免后续多次进行容量调整(频繁的容量调整会降低程序的运行效率)
3.string类对象的访问及遍历操作接口
operator[] : 运算符[]在string中有两个重载
std::string::operator[]
char& operator[] (size_t pos); const char& operator[] (size_t pos) const;
[]运算符重载的功能是返回字符串中下标为pos位置的字符的引用(不带const的可读可写,带const的只可读不可写)
- 用迭代器去遍历容器的有效数据(迭代器遍历法通用于所有容器)
迭代器在使用层面上类似于指针:
begin()接口可以返回指向容器首个有效数据的迭代器
end()接口可以返回指向容器末尾有效数据下一个位置空间的迭代器
int main() { string b("hello world"); //调用形参为const char* 的构造函数 auto it = b.begin(); //auto自动识别的类型为 std::string::iterator while (it != b.end()) { cout << *it; ++it; } return 0; }
用指针来类比记忆:
4. string类对象中字符串的修改操作接口
- operator+= (+=的运算符重载)
std::string::operator+=
将一个string对象的字符串追加到string对象的字符串中。 string& operator+= (const string& str);
将一个常量字符串追加到string对象的字符串中 string& operator+= (const char* s);
将一个字符追加到string对象的字符串中 string& operator+= (char c)