目录
一.string类简介
二.string类的常用成员接口
1.string类对象的构造函数接口
string类对象的容量操作接口
std::string::size
std::string::length std::string::empty std::string::clear std::string::resize std::string::reserve
3.string类对象的访问及遍历操作接口
std::string::operator[]
- string类对象中字符串的修改操作接口
std::string::operator+=
一.string类简介
string是表示字符序列的类(只适用于单字节字符类型)。
string类的接口与常规容器的接口基本相同
string类是basic_string类模板的一个char类型的实例,string是宏定义的类名:
typedef basic_string<char, char_traits, allocator> string
使用string类时,必须包含#include,string类定义在命名空间std中
二.string类的常用成员接口
1.string类对象的构造函数接口
string主要的构造函数有四个重载:
include
include
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对象使用的空间配置器(内存池)
- 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;
}
用指针来类比记忆:
- string类对象中字符串的修改操作接口
operator+= (+=的运算符重载)
std::string::operator+=
将一个string对象的字符串追加到string对象的字符串中。
string& operator+= (const string& str);
将一个常量字符串追加到string对象的字符串中
string& operator+= (const char* s);
将一个字符追加到string对象的字符串中
string& operator+= (char c)