代码编织梦想

string_view 是C++17所提供的用于处理只读字符串的轻量对象

考虑一下这种场景,我们有一个字符串,然后我们想获取这个字符串中的某个子串,然后对这个字符串做一些只读操作,例如将其与其他字符串作比较,输出等。一般情况下,我们会使用std::string.substr(),但是此时会新建一个std::string对象,并且进行内存分配。但是大量的新建对象和分配内存会使得程序的性能降低,那么我们有没有什么方法来避免这个过程,提高性能呢?

C++17给出的答案就是std::string_view。同样获取一个子串,std::string_view的操作是只保存一个指针子串的长度。省去了分配内存及赋值等操作。

string_view::substr()返回值类型string_view不产生新的字符串,不会进行内存分配

string_view通常用于函数参数类型,可用来取代 const char* 和 const string&。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45925735/article/details/129845931

c++17尝鲜:string_view_zwvista的博客-爱代码爱编程_c++ stringview

string_view string_view 是C++17所提供的用于处理只读字符串的轻量对象。这里后缀 view 的意思是只读的视图。 通过调用 string_view 构造器可将字符串转换为 string_view

【c++】《c++ 17 入门经典》读书笔记 17 ---- 字符串视图 std::string_view_kingkee的博客-爱代码爱编程

一、字符串视图 std::string_view std::string_view  这是 C++17 标准库新增的 string_view 头文件中定义的一个类型。 此类型的值的行为非常类似于 const std::string 类型的值(注意有 const),但有一个重要区别:任何时候都不能通过它们的公共接口修改它们封装的字符串。也就是说,在某

c++17之std::string-爱代码爱编程

背景 在进行参数传递时,当数据占用的内存比较大是,减少数据的拷贝可以有效提升程序的性能。在C语言中使用的是指针,在C++中使用了安全性更高的引用类型。所以C++中const std::string&成为了传递只读数据的不二方式。但是从实践来看,也存在一些问题: 字符串字面值、字符数组、字符串指针的传递仍要数据拷贝 这三类低级数据类型与strin

本周小贴士#1:string_view-爱代码爱编程

本周小贴士#1:string_view 最初作为TotW#1发表于2012年4月20日 作者:迈克尔·查斯顿(Michael Chastain) 更新于 2020-8-18 什么是string_view,为什么应该关心? 当创建一个带有(常量)字符串作为参数的函数时,你有三种常见的选择:其中两个你已经知道,还有一个你可能不知道: // C风格转

详解C++17下的string_view-爱代码爱编程

看到一个介绍 C++17 的系列博文(原文),有十来篇的样子,觉得挺好,看看有时间能不能都简单翻译一下,这是第五篇~ 当字符串数据的所有权已经确定(譬如由某个string对象持有),并且你只想访问(而不修改)他们时,使用 std::string_view 可以避免字符串数据的复制,从而提高程序效率,这(指程序效率)也是这篇文章的主要内容. 这次要介绍的

C++17 string_view 详细案例-爱代码爱编程

(鄙人总结,希望和大家交流,切莫转载,谢谢!) C++17 使用std::string_view来观测一段字符数组,减少内存的拷贝,或者说不至于像string对象移动后,前一个对象放弃那块本属于它的内存。 // 原码: // TYPEDEFS FOR basic_string_view using string_view = basic_string_

C++ string_view-爱代码爱编程

string_view 提供字符串的一个视图。使用 string_view 能够减少字符串的拷贝。 类 basic_string_view : 模板类std::string_view : std::basic_string_view<char>std::wstring_view : std::basic_string_view<wch

C++17新特性 std::string_view-爱代码爱编程

这篇文章讲解的很详细: [译]C++17,使用 string_view 来避免复制_tkokof1的专栏-CSDN博客_string_view 主要有三个新的知识点: 1. string 类型只有在字符串超过指定大小(具体实现相关)时才会申请(堆)内存,对于 MSVC 来说,指定大小为 15, 对于 GCC 和 Clang,这个值则为 23.

跟我学c++中级篇——STL字符串之std::string_view-爱代码爱编程

一、标准库字符串处理 C和C++的一个很不一样的区别就是对字符串的处理,在c++的标准库里提供了一个std::string的字符串操作类。这使得c++对字符串的操作从某种程度上摆脱了原始指针的操作。从这个角度来说,对c++小白来说,肯定是利好的。但麻烦就在于c++强大的灵活性,导致在处理字符串时,效率会由于不同的应用编码导致差异性很大;同时,一不小心就有

C++使用std::string_view分割字符串-爱代码爱编程

原文 实现与测试 #include <vector> #include <string_view> #include <iostream> using namespace std; std::vector<std::string_view> Split(std::string_view sv, char

C++17新特性之std::string_view-爱代码爱编程

std::string_view系C++17标准发布后新增的内容,类成员变量包含两个部分:字符串指针和字符串长度,相比std::string, std::string_view涵盖了std::string的所有只读接口。如果生成的std::string无需进行修改操作,可以把std::string转换为std::string_view,std::strin

c++(17):string_view_风静如云的博客-爱代码爱编程

当我们使用string类时,通常会堆内存的分配: #include <iostream> #include <string> using namespace std; void* operator new(size_t count) { cout << "new " << count <<

c++中的std::string_view在vs中报错(命名空间“std“没有成员“string_view“)_三和尚的博客-爱代码爱编程

一、报错的地方 1、报错的代码如下: #include <iostream> #include <string_view> int main() { std::string_view s