std::string_view
是 C++17 新增的标准库类型,它是对字符串的非拥有性(non-owning)视图,允许在不复制字符串的情况下访问字符串的片段。std::string_view
提供了一种轻量级的方式来操作字符串,特别适用于对字符串进行查找、比较、子串提取等操作。
以下是 std::string_view
的主要特点和用法:
-
非拥有性:
std::string_view
不拥有字符串的内存,只是对字符串的引用或视图。它不负责内存的分配和释放,只是提供了对字符串的访问功能。 -
轻量级:
std::string_view
对象的大小很小(通常只包含指向字符串的指针和字符串的长度),因此在传递、返回和存储时的开销很小。 -
不可变性:
std::string_view
对象是不可变的,即不能修改字符串的内容。它提供了一系列的访问函数来获取字符串的信息,但不提供修改字符串的函数。 -
适用于字符串操作:
std::string_view
提供了丰富的成员函数和操作符重载,用于对字符串进行查找、比较、子串提取等操作。它可以与标准库中的算法和其他字符串类型(如std::string
)无缝配合使用。 -
性能优化:由于
std::string_view
不需要复制字符串的内容,因此在某些情况下可以提高性能,尤其是在频繁进行字符串操作时。
#include <iostream>
#include <string_view>
void printSubstring(std::string_view str_view, size_t start, size_t length) {
if (start < str_view.length()) {
std::cout << "Substring: " << str_view.substr(start, length) << std::endl;
} else {
std::cout << "Invalid start index." << std::endl;
}
}
int main() {
std::string str = "Hello, world!";
std::string_view str_view(str); // 从字符串创建 string_view
std::cout << "Original string: " << str_view << std::endl;
std::cout << "Length: " << str_view.length() << std::endl;
printSubstring(str_view, 7, 5); // 输出子串 "world"
return 0;
}