美文网首页
C++ 17:string_view

C++ 17:string_view

作者: fck_13 | 来源:发表于2020-03-14 01:23 被阅读0次
  • 为什么要增加string_view?

    考虑一下这种场景,我们有一个字符串,然后我们想获取这个字符串的一个子串,然后对这个子串对一些只读操作,比如输出,与其他字符串比较等。一般情况下,我们会新建一个std::string对象,然后新建这个对象的时候会分配内存,然后对分配的内存进行赋值等操作。这是一个比较复杂的操作,那么我们有没有什么方法来简化这个过程呢?C++ 17给出的答案就是std::string_view。同样获取一个子串,std::string_view的操作是只保存下一个指针和子串的长度。
    也就是说 std::string_view 相比较 std::string,在构建子串的时候,省去了分配内存及赋值等操作。

    我们来看一下下面的代码

    #include <iostream>
    #include <string>
    #include <string_view>
    
    const char *a = "hello world";
    int main(){
      std::string str1(a, 5);
      std::string_view str2(a, +5);
      
      std::cout<<str1<<std::endl;
      std::cout<<str2<<std::endl;
      return 0;
     }
    

    str1是一个std::string对象,它内部维护着一段内存,用来存储“hello”。也就是说,str1拥有(own)自己的一份“hello”;而str2内部只是一个指针和一个表示长度的值,这个指针就是a的值,长度为5,也就是说,str2并不实际拥有一个字符串,它只是类似于一种对“hello world”的引用。这也就是为什么std::string_view的proposal的名字叫做 > string_view : a non-owning reference to a string < 。

    所以如果简单的回答为什么增加std::string_view的话,那就是提高性能。

  • std::stringstd::string_view 在标准库中定义的函数类似。很方便上手使用。

  • 一些跟std::string 相关的内容

    在C 语言中,字符串是以\0结尾的,所以strlen计算字符串的长度时,实际上就是遍历字符串,直到找到\0,所以,这种情况下,我们对一个字符串的引用,只用一个指针就可以做到。而string_view,无法通过\0来到达所表示的子串的结尾,所以,我们需要一个整型来表示字符串的长度。

相关文章

  • C++ 17:string_view

    为什么要增加string_view?考虑一下这种场景,我们有一个字符串,然后我们想获取这个字符串的一个子串,然后对...

  • string_view

    C++的string_view相当于两根指针。有点类似go语言的slice。它指向一个字符串。string_vie...

  • C++读一个目录下所有文件的方法

    C++ 17 C++ 17 前 参考 https://stackoverflow.com/questions/61...

  • 第4篇:C++ 高效的string_view

    string对象的性能问题 了解string对象的内存分配行为后,接下来我们如何考虑使用什么方法来避免字符串频繁的...

  • Boolan/C++面向对象高级编程 part2

    C++面向对象高级编程 part2 @(boolan C++)[C++]2017-10-22 14:17:56...

  • 入门

    2018年8月17日 22:11:45 最近学习下c++,先从泛读 c++ primer plus v6 开始吧.

  • Effective c++ 学习笔记(item17 store

    Effective c++ 学习笔记(item17 store newed objects in smart po...

  • 2017上半年计划

    Modern C++ 学习C++11/14/17,了解开源库实现及应用,尝试掌握及应用现代C++ 数据库 分析SQ...

  • C++字符串分割

    最近在研究C++,遇到一个问题需要将类似如下的字符串分割开:17;"_testCube##e17##13##Sma...

  • abel tips #1 string_view

    背景 在日常的c/c++编程中,我经常需要传递数据,比如传递常量字符数据给函数,为了减少不必要的内存拷贝,c*系列...

网友评论

      本文标题:C++ 17:string_view

      本文链接:https://www.haomeiwen.com/subject/jzwushtx.html