leetcode某题,使用string_view和string的时间复杂度和空间复杂度差很多,便查阅了资料
std::string_view类
它是std::basic_string_view类模板的实例化,在<string_view>头文件中定义。是const string&的简易替代品。不会额外复制字符串,所以不会额外产生内存开销,它支持和string类似的接口,但是缺少c_str()。并且添加了remove_prefix(size_t)和remove_suffix(size_t)方法。前者将起始指针 前移一定偏移量来收缩字符串,后者则将结尾指针倒退一定的偏移量来收缩。
注意:无法连接一个string和string_view,无法编译(解决方法:使用string_view.data()这一方法)
当形参是string_view时,你就可以传入string、 char*、字符串字面量(常量).
而如果以const string&为参数,则不能传入字符串字面量常量和 char*。只能用string。
string_view 是C++17所提供的用于处理只读字符串的轻量对象。这里后缀 view 的意思是只读的视图。
- 通过调用 string_view 构造器可将字符串转换为 string_view 对象。
string 可隐式转换为 string_view。 - string_view 是只读的轻量对象,它对所指向的字符串没有所有权。
- string_view通常用于函数参数类型,可用来取代 const char* 和 const string&。
string_view 代替 const string&,可以避免不必要的内存分配。 - string_view的成员函数即对外接口与 string 相类似,但只包含读取字符串内容的部分。
string_view::substr()的返回值类型是string_view,不产生新的字符串,不会进行内存分配。
string::substr()的返回值类型是string,产生新的字符串,会进行内存分配。 - string_view字面量的后缀是 sv。(string字面量的后缀是 s)