C中的string是什么意思?
摘要:深入理解 C++ 标准库中的 std::string 类:从基本用法到底层原理,涵盖初始化、容量管理、元素访问、修改操作、类型转换等核心知识点,以及 SSO 优化、string_view 等现代特性和最佳
目录核心概念初始化与构造容量与属性元素访问与遍历访问单个字符C 风格字符串遍历修改与操作查找与子串类型转换数值转字符串 std::to_string(value)字符串转数值现代化特性C++17:std::string_viewC++20底层原理SSO(Small String Optimization)COW(Copy-On-Write)最佳实践参数传递性能优化安全性
本文首发于我的个人博客:Better Mistakes
版权声明:本文为原创文章,转载请附上原文出处链接及本声明。
由于技术迭代较快,文章内容可能随时更新(含勘误及补充)。为了确保您看到的是最新版本,并获得更好的代码阅读体验,请访问:
🍭 原文链接:https://bfmhno3.github.io/note/string-in-cpp/
std::string 是 C++ Standard Library 提供的标准类之一,这也是 C++ 开发中最常用的类之一,它本质上是对 C 风格字符串(char*)的封装,提供了自动内存管理和丰富的操作接口。
核心概念
std::string 位于 <string> 头文件中,本质上是对 std::basic_string<char> 的特化版本。
头文件:#include <string>
命名空间:std
特点:动态管理内存,自动处理扩容,兼容 C 风格字符串。
初始化与构造
#include <string>
#include <vector>
std::string s1; // 默认构造,空字符串 ""
std::string s2 = "Hello, World"; // 拷贝初始化
std::string s3("Hello, World"); // 直接初始化
std::string s4(5, 'A'); // 生成 "AAAAA"
std::string s5(s2); // 拷贝构造
std::string s6(s2, 1, 3); // 子串构造:从索引 1 开始取 3 个字符 -> "ell"
// C++11 及以后
std::string s7 = {'H', 'i'}; // 列表初始化
容量与属性
了解容量对于优化性能至关重要,特别是避免不必要的内存重分配。
函数
说明
备注
size() / length()
返回字符数量
两者完全等价,一般用 size()
empty()
判断是否为空
推荐使用,比 size() == 0 语义更清晰
capacity()
当前分配的内存容量
通常 >=size()
reserve(n)
预分配 n 字节内存
避免 append 时的多次内存重分配
shrink_to_fit()
释放多余内存(C++11)
让 capacity 接近 size
元素访问与遍历
访问单个字符
operator[]:s[i]。不检查越界,效率高,但越界为导致未定义行为。
at():s.at[i]。检查越界,越界会抛出 std::out_of_range 异常。
front() / back():访问首尾字符。
C 风格字符串
c_str():返回 const char*,以 NULL 结尾。主要用于兼容旧式 C 接口(如 printf)。
data():C++11 前不保证 NULL 结尾,C++11 后与 c_str() 基本一致。
