C++ 标准字符串库

概述

定义于头文件 <string>

1
2
3
4
5
6
7
8
9
10
11
12
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<wchar_t>
std::u8string std::basic_string<char8_t>
std::u16string std::basic_string<char16_t>
std::u32string std::basic_string<char32_t>
std::pmr::string (C++17) std::pmr::basic_string
std::pmr::wstring (C++17) std::pmr::basic_string<wchar_t>
std::pmr::u8string std::pmr::basic_string<char8_t>
std::pmr::u16string (C++17) std::pmr::basic_string<char16_t>
std::pmr::u32string (C++17) std::pmr::basic_string<char32_t>

成员类型

成员类型 定义
traits_type Traits
value_type CharT
allocator_type Allocator
size_type Allocator::size_type(C++11 前)
std::allocator_traits::size_type(C++11 起)
difference_type Allocator::difference_type(C++11 前)
std::allocator_traits::difference_type(C++11 起)
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::pointer(C++11 起)
const_pointer Allocator::const_pointer(C++11 前)
std::allocator_traits::const_pointer(C++11 起)
iterator 随机访问迭代器 (LegacyRandomAccessIterator)
const_iterator 常随机访问迭代器
reverse_iterator std::reverse_iterator
const_reverse_iterator std::reverse_iterator<const_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 的哈希支持 (类模板特化)
您的支持将鼓励我继续创作!
0%