概述
定义于头文件 <string>
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
(1)
namespace pmr {
template <class CharT, class Traits = std::char_traits<CharT>>
using basic_string = std::basic_string< CharT, Traits,
std::polymorphic_allocator<CharT>>
}
(2) (C++17 起)
类模板 basic_string 存储并操纵作为非数组平凡标准布局类型的仿 char 对象序列。该类既不依赖字符类型,亦不依赖该类型上的原生操作。操作的定义通过 Traits 模板形参—— std::char_traits 的特化或兼容特性类提供。 Traits::char_type 和 CharT 必须指名同一类型;否则程序为病式。
basic_string 是相继存储的,即对于 basic_string s ,对任何 [0, s.size()) 中的 n 有 &*(s.begin() + n) == &*s.begin() + n
,或等价地,指向 s[0] 的指针能传递给期待指向 CharT[] 数组首元素指针的函数。
(C++11 起)
std::basic_string 满足具分配器容器 (AllocatorAwareContainer) 、顺序容器 (SequenceContainer) 及相接容器 (ContiguousContainer) (C++17 起)的要求
成员类型
类型 | 定义 |
---|---|
std::string | std::basic_string |
std::wstring | std::basic_string |
std::u8string | std::basic_string |
std::u16string | std::basic_string |
std::u32string | std::basic_string |
std::pmr::string (C++17) | std::pmr::basic_string |
std::pmr::wstring (C++17) | std::pmr::basic_string |
std::pmr::u8string | std::pmr::basic_string |
std::pmr::u16string (C++17) | std::pmr::basic_string |
std::pmr::u32string (C++17) | std::pmr::basic_string |
成员类型
成员类型 | 定义 |
---|---|
traits_type | Traits |
value_type | CharT |
allocator_type | Allocator |
size_type | Allocator::size_type(C++11 前) std::allocator_traits |
difference_type | Allocator::difference_type(C++11 前) std::allocator_traits |
reference | Allocator::reference(C++11 前) value_type&(C++11 起) |
const_reference | Allocator::const_reference(C++11 前) const value_type&(C++11 起) |
pointer | Allocator::pointer(C++11 前) std::allocator_traits |
const_pointer | Allocator::const_pointer(C++11 前) std::allocator_traits |
iterator | 随机访问迭代器 (LegacyRandomAccessIterator) |
const_iterator | 常随机访问迭代器 |
reverse_iterator | std::reverse_iterator |
const_reverse_iterator | std::reverse_iterator |
成员函数
成员函数 | 说明 |
---|---|
(构造函数) | 构造 basic_string |
(析构函数) | 销毁字符串,若使用内部存储则解分配它 |
operator= | 为字符串赋值 |
assign | 赋值字符给字符串 |
get_allocator | 返回关联的分配器 |
元素访问
元素访问 | 说明 |
---|---|
at | 访问指定字符,有边界检查 |
operator[] | 访问指定字符 |
front | 访问首字符 |
back | 访问最后的字符 |
data | 返回指向字符串首字符的指针 |
c_str | 返回字符串的不可修改的 C 字符数组版本 |
operator basic_string_view(C++17) | 返回到整个字符串的不可修改的 basic_string_view |
迭代器
迭代器 | 说明 |
---|---|
begin cbegin |
返回指向起始的迭代器 |
end cend |
返回指向末尾的迭代器 |
rbegin crbegin |
返回指向起始的逆向迭代器 |
rend crend |
返回指向末尾的逆向迭代器 |
容量
容量 | 说明 |
---|---|
empty | 检查字符串是否为空 |
sizelength | 返回字符数 |
max_size | 返回字符数的最大值 |
reserve | 保留存储 |
capacity | 返回当前对象分配的存储空间能保存的字符数量 |
shrink_to_fit | 通过释放不使用内存减少内存使用 |
操作
操作 | 说明 |
---|---|
clear | 清除内容 |
insert | 插入字符 |
erase | 移除字符 |
push_back | 后附字符到结尾 |
pop_back | 移除末尾字符 |
append | 后附字符到结尾 |
operator+= | 后附字符到结尾 |
compare | 比较二个字符串 |
starts_with | 检查 string 是否始于给定前缀 |
ends_with | 检查 string 是否终于给定后缀 |
replace | 替换字符串的指定部分 |
substr | 返回子串 |
copy | 复制字符 |
resize | 更改存储的字符数 |
swap | 交换内容 |
查找
查找 | 说明 |
---|---|
find | 于字符串中寻找字符 |
rfind | 寻找子串的最后一次出现 |
find_first_of | 寻找字符的首次出现 |
find_first_not_of | 寻找字符的首次缺失 |
find_last_of | 寻找字符的最后一次出现 |
find_last_not_of | 寻找字符的最后一次缺失 |
常量
常量 | 说明 |
---|---|
npos[静态] | 特殊值。准确含义依赖语境 (公开静态成员常量) |
非成员函数
非成员函数 | 说明 |
---|---|
operator+ | 连接两个字符串或者一个字符串和一个字符 (函数模板) |
operator== operator!= operator< operator> operator<= operator>= |
以字典序比较二个字符串 (函数模板) |
std::swap(std::basic_string) | 特化 std::swap 算法 (函数模板) |
erase(std::basic_string) erase_if(std::basic_string) |
擦除所有满足特定判别标准的元素 (函数模板) |
输入/输出
输入/输出 | 说明 |
---|---|
operator<< operator>> |
进行 string 上的流输入与输出 (函数模板) |
getline | 从 I/O 流读取数据到字符串 (函数模板) |
数值转换
数值转换 | 说明 |
---|---|
stoi stol stoll |
转换字符串为有符号整数 (函数) |
stoul stoull |
转换字符串为无符号整数 (函数) |
stof stod stold |
转换字符串为浮点值 (函数) |
to_string | 转换整数或浮点值为 string (函数) |
to_wstring | 转换整数或浮点值为 wstring (函数) |
定义于内联命名空间 std::literals::string_literals
定义于内联命名空间 std::literals::string_literals | 说明 |
---|---|
operator""s(C++14) | 转换字符数组字面量为 basic_string (函数) |
辅助类
辅助类 | 说明 |
---|---|
std::hash<std::string> | string 的哈希支持 (类模板特化) |