C++17 std::string_view:高效的字符串引用
掌握string_view的用法、优势及注意事项,避免不必要的字符串拷贝。 · 难度:入门 · +15XP
为什么需要string_view?
std::string_view是一个非拥有型字符串视图,可以引用std::string、C风格字符串或字符数组的一部分。它避免拷贝,常用于函数参数和子串提取。
基本用法
#include <string_view>
#include <iostream>
void print_length(std::string_view sv) {
std::cout << sv.size() << '
';
}
int main() {
std::string s = "Hello World";
const char* cstr = "C-style";
print_length(s); // 11
print_length(cstr); // 8
print_length("temp"); // 4
std::string_view sv = s.substr(0, 5); // 高效,不拷贝
std::cout << sv << '
'; // "Hello"
}
常用操作
| 方法 | 说明 |
|---|---|
size() / length() | 字符串长度 |
data() | 底层字符指针(不一定以'\0'结尾) |
substr(pos, count) | 子视图 |
remove_prefix(n) | 移除前n个字符 |
remove_suffix(n) | 移除后n个字符 |
注意事项
- string_view不拥有内存,必须确保原始字符串的生命周期长于视图。
data()返回的指针不一定以空字符结尾,不要传递给需要C字符串的函数。
练习提示
编写一个函数count_words,接受std::string_view,返回其中以空格分隔的单词数量。在main中用多种字符串测试。