1. STL string基础概念解析
在C++标准模板库(STL)中,string是一个专门用于处理字符串的类模板实例化。它封装了字符序列的操作,提供了丰富的成员函数来处理文本数据。与C风格字符串(char*)相比,STL string具有自动内存管理、边界检查和安全操作等优势。
string实际上是basic_string
cpp复制typedef basic_string<char> string;
这个设计意味着string类本质上是一个字符类型为char的模板特化版本。basic_string模板还支持其他字符类型,比如wstring用于宽字符(wchar_t),C++11引入的u16string(char16_t)和u32string(char32_t)用于Unicode字符处理。
重要提示:虽然string常用于处理文本,但它实际上操作的是字节序列,并不直接感知字符编码。处理UTF-8等多字节编码时需要特别注意。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. string的核心特性与内存管理
2.1 自动内存管理机制
string最显著的优势是其自动内存管理能力。与C风格字符串不同,string对象会自动处理存储空间的分配和释放。当字符串长度增长时,string会动态扩展其容量,通常采用指数增长的策略来平衡性能和内存使用。
容量相关成员函数:
capacity():返回当前分配的存储空间大小(以字符计)reserve(n):预分配至少容纳n个字符的空间shrink_to_fit()(C++11):请求减少容量以适应当前大小
cpp复制std::string str;
str.reserve(100); // 预分配100字符空间
cout << "Capacity: " << str.capacity(); // 输出100
str = "Hello";
str.shrink_to_fit(); // 收缩到刚好容纳内容
2.2 字符串长度与大小
string提供了两种获取字符串长度的方法:
size():返回字符串的字符数(字节数)length():与size()功能相同,提供与C风格字符串的length概念兼容
