1. string类概述与设计哲学
作为C++标准库中最常用的容器之一,string类封装了字符序列的存储与操作,其设计体现了C++作为系统级语言的特性与面向对象思想的结合。与C风格的字符数组相比,string自动管理内存、提供丰富的成员函数,同时保持了高性能。
关键区别:string与C风格字符串(char*)的本质差异在于前者是真正的类对象,封装了字符数组指针、容量、长度等信息,而后者仅是字符数组的首地址指针。
从历史演进看,string类在C++98标准中首次标准化,后续C++11/14/17标准陆续增加了移动语义、字符串字面量等新特性支持。现代C++编程中,应当优先使用string而非原始指针处理字符串。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. string类核心接口详解
2.1 对象构造与初始化
string提供多种构造函数以适应不同场景需求:
cpp复制// 空字符串构造
std::string s1;
// 从C风格字符串构造
const char* cstr = "hello";
std::string s2(cstr);
// 填充构造
std::string s3(5, 'A'); // "AAAAA"
// 拷贝构造
std::string s4(s2);
构造时的内存分配策略:
- 默认构造通常分配15字节的初始缓冲区(实现依赖)
- 其他构造方式会根据输入字符串长度按需分配
- 现代实现采用SSO(Small String Optimization)优化短字符串
2.2 容量管理操作
容量相关接口是string高效使用的关键:
| 函数 | 时间复杂度 | 作用 |
|---|---|---|
| size() | O(1) | 返回有效字符数 |
| capacity() | O(1) | 返回当前分配的总容量 |
| reserve(n) | O(n) | 预分配至少n字节的内存 |
| shrink_to_fit( |
