【STL】顺序容器之string用法总结
发布日期:2021-05-08 01:38:06 浏览次数:23 分类:精选文章

本文共 1820 字,大约阅读时间需要 6 分钟。

一、基本原理

string类似于vector,内部使用动态数组方式实现。与vector不同,string专门用于存储和操作字符,提供了丰富的字符串操作接口。

vector的工作原理是预留空闲空间,当元素被添加时,只需将新元素复制到预留空间中。当空间不足时,vector会重新申请更大的内存空间,并将现有内容拷贝过去。同样,string也使用了类似的动态内存管理机制,但它专门用于存储字符。

与Java的String类相比,C++的string对象是可修改的,可以随时修改其中的字符内容。这种可修改性使得C++的字符串操作更加灵活。然而,这也意味着在进行频繁的修改操作时,性能可能会受到影响。

二、用法

要使用string类,需要包含头文件:

#include

然后在代码中使用命名空间:

using std::string;

初始化

可以通过多种方式初始化string对象:

- 直接初始化:`string s1;`创建一个空字符串。 - 预定义大小并赋值:`string s1(100, 'a');`创建一个包含100个'a'的字符串。 - 使用字符串字面量:`string s1("abc");`创建一个包含"abc"的字符串。 - 使用初始化列表:`string s1{'a', 'b', 'c'};`创建一个包含字符'a','b','c'的字符串。 - 拷贝初始化:`string s1 = s2;`将s1设置为s2的拷贝。

访问元素与获取迭代器

可以通过下标访问元素:

- `s1[n]`或`*iter`访问字符。 - 使用成员函数`at()`:`s1.at(n);`。 - 使用前导和后置迭代器:`s1.front()`, `s1.back()`, `s1.begin()`, `s1.end()`等。

添加与删除元素

在尾部添加元素:

- `s1.push_back('a');`在尾部添加一个字符。 - `s1.append("abc");`在尾部添加字符串"abc"。 - `s1.insert(iter, 'a');`在迭代器指向的位置插入字符。

删除元素:

- `s1.pop_back();`删除尾部字符。 - `s1.erase(iter);`删除迭代器指向的字符。 - `s1.erase(iter1, iter2);`删除迭代器范围内的字符。 - `s1.clear();`删除所有字符。

替换元素

可以通过多种方式替换string内容:

- 全部替换:`s1 = s2;`或`swap(s1, s2);`。 - 部分替换:`s1.replace(pos1, len1, "abc");`替换指定范围内的字符。 - 拷贝初始化:`s1.assign(iter1, iter2);`替换为迭代器范围内的字符。

字符串的大小

string有两个大小属性:

- `size()`:表示实际使用的字符数量。 - `capacity()`:表示预留的空闲空间大小。 - `shrink_to_fit()`:尝试减少capacity到与size相同。 - `reserve(n)`:预留至少n个字符的空间。 - `resize(n)`:调整大小到n个字符,若n小于当前size则删除多余字符。

子字符串与搜索操作

提取子字符串:

- `s1.substr(pos, n);`从指定位置提取n个字符。

字符串搜索:

- `s1.find(args);`查找字符或子字符串的位置。 - `s1.rfind(args);`查找字符或子字符串的最后位置。

比较string对象

可以使用比较运算符:

- `==`, `!=`, `<`, `<=`, `>`, `>=`比较字符串的字典序。 - 使用`compare()`方法进行详细比较。

数值转换

将字符串转换为数值:

- `stoi(s, p, b)`将字符串转换为整数。 - `stol`, `stoul`, `stoll`, `stoull`转换为长整数。 - `stof`, `stod`, `stodl`转换为浮点数和长双精度数。

注意事项

数组越界:访问s1[n]时,如果n超出范围,行为是未定义的。使用`at()`方法会抛出`out_of_range`异常。迭代器失效:向string中添加或删除元素可能导致迭代器失效。请谨慎使用迭代器,避免在容器修改后继续使用。

上一篇:【STL】顺序容器之deque用法总结
下一篇:【STL】顺序容器之list、forward_list用法总结

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月30日 13时17分44秒