string类的介绍
概念:
std::string是C++ 标准库中用于处理字符串的类,它封装了对字符序列的操作,使得字符串处理更加便捷和安全。
特点:
1.动态内存管理:std::string会自动分配和释放内存,避免了手动管理内存的复杂性。
2.丰富的成员函数:提供了各种成员函数用于字符串操作,如连接、查找、替换和子串提取等。
3.支持 C 风格字符串:可以通过构造函数和赋值操作与 C 风格字符串(char*
)进行转换。
4.安全性:比 C 风格字符串更安全,避免了缓冲区溢出等常见问题。
string类常用接口
构造函数:
1.string();使用无参构造初始化string对象:
2.string (const char* s);使用字符串初始化对象:
字符串属于常量类型,且默认以字符'\0'结尾,使用字符串初始化对象会从字符的开始位置一直拷贝到'\0'结束。
3.string (const string& str);使用已经存在的string对象拷贝新的string对象。
4.string (const string& str, size_t pos, size_t len = npos);从已有的string对象的第pos个位置拷贝len个长度的字符给新对象。
npos:是string类中的静态成员变量,类型为size_t(无符号整型)值为-1(二进制全为1及整型的最大值)
5.string (const char* s, size_t n);拷贝从第一个字符串开始的n个字符。
析构函数:
string类内部通常使用动态分配的内存来存储字符串数据。析构函数负责释放这些内存。析构函数不需要我们主动调用,编译器会自动进行析构。
赋值拷贝:
1.string& operator= (const string& str);赋值拷贝已有的string对象
2.string& operator= (const char* s);赋值拷贝一个常量字符串
string::operator[ ]
string对象支持用数组的形式去访问string里的成员变量中的内容。
同时operator[ ]又构成函数重载,及修饰const的string对象同时返回const引用,不能修改。编译器会根据传入的类型来自动识别调用const operator[ ]还是operator[ ]。
string::Iterators(迭代器)接口函数
Iterator的概念:
在 C++ 中,迭代器(iterator)是一种用于遍历容器(如std::vector,std::list,std::string等)元素的工具。迭代器提供了一种统一的接口,使得对不同容器的元素访问和操作变得简单和一致。可以将迭代器视为容器的“指针”,它们允许你在容器中移动,读取和修改元素。
std::begin与std::end
从上图可以看到,我们创建了一个string类的iterator(迭代器)变量it,并用s1.begin()函数的返回的迭代器值赋值给it,接着就类似指针的操作,将it解引用并循环输出值。s1.end()函数指向的是结尾的位置,而结尾的位置是一个理论位置不希望被解引用,所以while循环的继续条件为it!=s1.end.
std::rbegin与std::rend
使用rbegin与rend的函数,必须使用reverse_iterator(反向迭代器)类型的变量进行匹配。
string:capacity接口函数
string:size与string:length:
都是用来返回字符串的长度,只是名字上有所差别本质没有区别。
string:resize
resize可以用在增加或缩短string中有效数据的长度。
string:capacity
用来返回当前string对象的可用内存容量。
string:reserve
reserve用来调整string对象的容量大小。
从上图可以看到使用reserve修改对象的数据容量,是否具体真的执行是看编译器的,当第二次为缩小s1的容量时并没有发生变化。
string:clear
用来清理string对象的内容
string:Modifiers接口函数
string:push_back与string:pop_back
push_back:从string对象的结尾插入一个字符。
pop_back:从string对象的结尾('\0'之前)删除一个字符。
string:append
1.string& append (const string& str):使用已有的string对象数据拓展自身对象数据。
2.string& append (const string& str, size_t subpos, size_t sublen):截取string对象中的一部分内容到自身内容后.
3.string& append (const char* s);将一串字符串添加到自身内容后
4.string& append (const char* s, size_t n);将字符串从头开始的一部分数据添加至自身内容后。
string:operator+=
1.string& operator+= (const string& str):+=一个string对象
2.string& operator+= (const char* s);+=一个字符串
3.string& operator+= (char c);+=一个字
从operator+=的运算符重载可以看出operator+=运算符同时支持push_back以及append的操作,所以建议使用operator+=操作简便还容易懂。
string:replace
1.string& replace (size_t pos, size_t len, const string& str)
2.string& replace (size_t pos, size_t len, const char* s);
3.string& replace (size_t pos, size_t len, const char* s);
4.string& replace (size_t pos, size_t len, const char* s, size_t n);
string:swap
string:insert
1.string& insert (size_t pos, const string& str);
2.string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
3.string& insert (size_t pos, const char* s);
4. string& insert (size_t pos, size_t n, char c);
string:erase
string:operations接口函数:
string:c_str:
string:find
1.size_t find (const string& str, size_t pos = 0) const;
2.size_t find (const char* s, size_t pos = 0) const;
3.size_t find (char c, size_t pos = 0) const;
string:substr:
Non-member function overloads接口函数
string:relational operators
注意这里比较操作是按照字符的ASCII值进行单个比较,并不是对两个对象的长度或者容量比较。
string:operator>>
string:operator<<
string:getline:
————那么文章到这就结束了,感谢各位观看。