C++中的string容器详解
std::string
是C++标准库中用于处理字符串的容器类,它提供了丰富的字符串操作功能,比C风格的字符数组(char[]
)更安全、更方便。
基本特性
- 动态大小:string可以动态调整大小,无需手动管理内存
- 丰富的操作:提供多种字符串操作方法
- 安全性:自动处理内存分配和释放,减少缓冲区溢出风险
- 兼容性:可以与C风格字符串互操作
头文件
使用string需要包含头文件:
构造函数
string提供了多种构造函数:
std::string s1; std::string s2("Hello"); std::string s3(s2); std::string s4(5, 'x'); std::string s5(s2.begin(), s2.begin()+3);
|
常用操作
赋值操作
std::string s; s = "Hello"; s.assign("World"); s.assign(3, '!');
|
访问元素
char c = s[0]; c = s.at(1); c = s.front(); c = s.back();
|
修改操作
s += " C++"; s.append(" is great"); s.push_back('!'); s.insert(5, " amazing"); s.erase(5, 8); s.replace(0, 5, "Hi"); s.clear();
|
容量操作
int len = s.length(); bool empty = s.empty(); s.reserve(100); int cap = s.capacity(); s.shrink_to_fit();
|
字符串比较
if (s1 == s2) { } if (s1 < s2) { } if (s1.compare(s2) == 0) { }
|
子串操作
std::string sub = s.substr(6, 5); size_t pos = s.find("C++"); pos = s.rfind("C++");
|
数值转换
std::string num = std::to_string(123); int n = std::stoi("456"); double d = std::stod("3.14");
|
迭代器支持
string支持迭代器,可以用于遍历:
for (auto it = s.begin(); it != s.end(); ++it) { std::cout << *it; }
for (char c : s) { std::cout << c; }
|
与C风格字符串互操作
const char* cstr = s.c_str(); const char* data = s.data();
|
性能考虑
- string使用动态内存分配,频繁修改可能导致多次重新分配
- 对于大量字符串操作,预先使用
reserve()
预留空间可以提高性能
- 短字符串优化(SSO):许多实现会对短字符串进行优化,避免堆分配
现代C++特性
C++11及以后版本为string添加了:
- 移动语义支持
- 字面量操作符
- 更多的构造函数和赋值操作符重载
总结
std::string是C++中处理字符串的首选方式,它提供了安全、高效且功能丰富的字符串操作接口。相比C风格字符串,它更安全、更方便,是现代C++程序中处理文本数据的基石。