C++ StringView
在 C++17 中,引入了 std::string_view
类型,它是一个轻量级的、不可变的字符串视图,可以用来代替 const char*
和 const std::string&
,并且提供了许多方便的方法来操作字符串。
比如在一些新兴语言 rust 设计就直接支持&str 切片
创建 StringView
可以通过以下方式来创建 std::string_view
:
1 | // 从字符串字面量创建 |
StringView 的基本操作
获取字符串长度
可以使用 size()
方法来获取字符串的长度:
1 | std::string_view sv("Hello, world!"); |
访问字符串中的字符
可以使用 operator[]
或 at()
方法来访问字符串中的字符:
1 | std::string_view sv("Hello, world!"); |
截取字符串
可以使用 substr()
方法来截取字符串:
1 | std::string_view sv("Hello, world!"); |
查找子字符串
可以使用 find()
方法来查找子字符串:
1 | std::string_view sv("Hello, world!"); |
比较字符串
可以使用 operator==
和 operator!=
来比较两个字符串是否相等:
1 | std::string_view sv1("Hello, world!"); |
StringView 的优点
使用 std::string_view
的好处在于它是一个轻量级的、不可变的字符串视图,可以避免不必要的内存分配和拷贝。在需要操作字符串的场合,使用 std::string_view
可以提高程序的性能和效率。
C++17 以下解决方案
- absl::string_view
- tensorflow stringpiece 使用absl
- level db: Slice
- boost string_view
- brpc string_piece brpc 注释copy from chromium
- chromium sptring_piece
总结
std::string_view
是一个轻量级的、不可变的字符串视图,可以用来代替 const char*
和 const std::string&
,并且提供了许多方便的方法来操作字符串。在需要操作字符串的场合,使用 std::string_view
可以提高程序的性能和效率。