当前位置: 首页 > wzjs >正文

网站建设教程纯正苏州久远网络浏览器打开是2345网址导航

网站建设教程纯正苏州久远网络,浏览器打开是2345网址导航,网站制作排行榜,做外汇需要关注的新闻网站一、std::string_view简介 std::string_view是C17引入的一种轻量级的字符串视图类,它提供了一个字符窜的只读视图,而不需要进行内存和复制。它仅持有一个指向字符串数据的指针和一个表示字符串长度的整数,具有如下特点: 只读访问…

一、std::string_view简介

std::string_view是C++17引入的一种轻量级的字符串视图类,它提供了一个字符窜的只读视图,而不需要进行内存和复制。它仅持有一个指向字符串数据的指针和一个表示字符串长度的整数,具有如下特点:

  • 只读访问:std::string_view的方法都不会修改原有的字符串,也不会真正的分配内存保存字符串的一部分或者全部。
  • 不拥有字符串数据的所有权:该特性本身不分配内存存储字符串数据。
  • 零拷贝:不会产生字符串的复制拷贝,所以不会产生拷贝这种额外开销。
  • 轻量级:通常只包含一个指针和一个长度,开销很小。
  • 灵活性:可以同时处理C风格字符串、std::string和字符数组。

二、性能提升分析

(一)避免不必要的内存分配和复制操作

std::string_view避免了不必要的内存分配和复制操作,从而提高了性能。例如,在函数参数传递中,使用std::string_view无需进行内存拷贝,而std::string可能涉及深拷贝,这使得std::string_view在参数传递开销上极低。

(二)高效的函数参数传递

std::string_view在函数参数传递中表现出色,特别是在需要频繁传递字符串的场景中。由于它不涉及数据的复制,因此可以显著减少内存使用和提高处理速度。

(三)字符串解析与处理

在解析文本文件或处理网络数据流时,std::string_view可以避免创建大型的字符串拷贝,从而提高程序的性能。例如,在处理日志文件或解析配置文件时,使用std::string_view可以大幅提升性能。

(四)高效的搜索与匹配

std::string_view提供了丰富的成员函数,用于字符串的比较、查找等操作,这些操作在不复制原始数据的情况下进行,提高了效率。

三、使用注意事项

(一)生命周期管理

std::string_view不负责内存管理,使用时需要确保其引用的数据在string_view的生命周期内是有效的,否则可能导致悬空指针或野指针问题。

(二)安全性

虽然std::string_view提供了字符串的长度信息,避免了字符串越界问题,但在使用过程中仍需注意数据的有效性和安全性。

四、示例代码

以下示例代码展示了如何使用 std::string_view 以及它在不同场景下的性能优势:

#include <iostream>
#include <string>
#include <string_view>
#include <vector>
#include <chrono>// 示例1:从不同类型的字符串创建 string_view
void createStringView() {// 从 std::string 创建std::string str = "Hello, World!";std::string_view view1(str);std::cout << "view1: " << view1 << std::endl;// 从 C 风格字符串创建const char* cstr = "C-style string";std::string_view view2(cstr);std::cout << "view2: " << view2 << std::endl;// 从字符数组创建const char arr[] = "Character array";std::string_view view3(arr, sizeof(arr) - 1); // 注意:手动指定长度std::cout << "view3: " << view3 << std::endl;
}// 示例2:使用 string_view 的成员函数
void useStringViewFunctions() {std::string str = "Hello, World!";std::string_view view(str);// 基本操作std::cout << "Length: " << view.length() << std::endl;std::cout << "Substring: " << view.substr(7) << std::endl; // "World!"// 查找操作size_t pos = view.find(',');if (pos != std::string_view::npos) {std::cout << "Found comma at position: " << pos << std::endl;}
}// 示例3:性能测试 - 函数参数传递
void processString(const std::string& str) {// 模拟处理
}void processStringView(std::string_view view) {// 模拟处理
}void performanceTest() {std::string largeString(1000000, 'a'); // 创建一个较大的字符串// 测试 std::string 的性能auto start = std::chrono::high_resolution_clock::now();for (int i = 0; i < 1000; ++i) {processString(largeString);}auto end = std::chrono::high_resolution_clock::now();std::cout << "std::string time: " << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << " us" << std::endl;// 测试 std::string_view 的性能start = std::chrono::high_resolution_clock::now();for (int i = 0; i < 1000; ++i) {processStringView(largeString);}end = std::chrono::high_resolution_clock::now();std::cout << "std::string_view time: " << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << " us" << std::endl;
}// 示例4:性能测试 - 字符串处理
void parseLogLine(const std::string& line) {// 模拟解析日志行size_t pos = line.find(' ');if (pos != std::string::npos) {std::string timestamp = line.substr(0, pos);// ...}
}void parseLogLineView(std::string_view line) {// 模拟解析日志行size_t pos = line.find(' ');if (pos != std::string_view::npos) {std::string_view timestamp = line.substr(0, pos);// ...}
}void stringProcessingTest() {std::string logLine = "2023-10-01 12:34:56 INFO Some log message";// 测试 std::string 的性能auto start = std::chrono::high_resolution_clock::now();for (int i = 0; i < 1000000; ++i) {parseLogLine(logLine);}auto end = std::chrono::high_resolution_clock::now();std::cout << "std::string processing time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms" << std::endl;// 测试 std::string_view 的性能start = std::chrono::high_resolution_clock::now();for (int i = 0; i < 1000000; ++i) {parseLogLineView(logLine);}end = std::chrono::high_resolution_clock::now();std::cout << "std::string_view processing time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms" << std::endl;
}int main() {createStringView();useStringViewFunctions();performanceTest();stringProcessingTest();return 0;
}

代码说明

  1. 创建 std::string_view

    • 可以从 std::string、C 风格字符串或字符数组创建 std::string_view
    • 注意:从字符数组创建时,需要手动指定长度,否则可能会包含多余的字符。
  2. 使用 std::string_view 的成员函数

    • substr:获取子字符串视图(不涉及数据复制)。
    • find:查找字符或子字符串的位置。
  3. 性能测试 - 函数参数传递

    • 比较了 std::stringstd::string_view 作为函数参数时的性能差异。
    • std::string_view 避免了不必要的数据复制,性能更高。
  4. 性能测试 - 字符串处理

    • 模拟解析日志行的场景,比较了 std::stringstd::string_view 的性能。
    • std::string_view 在字符串处理场景中表现更优,因为它避免了创建临时字符串对象。

五、总结

std::string_view作为一种轻量级的字符串处理工具,在只读场景下,特别是在需要高性能的场景下,具有显著的优势。它通过避免不必要的字符串拷贝,提高了程序的性能,同时保持了API的灵活性。在现代C++编程中,合理运用std::string_view,可以在确保性能的同时,提高程序的安全性和灵活性。

http://www.dtcms.com/wzjs/513797.html

相关文章:

  • 江门网站建设公司新冠病毒最新消息
  • 如何做网站怎么赚钱吗填写电话的广告
  • 好大夫在线个人网站王建设百度搜索如何去广告
  • 江苏专业做网站的公司网络优化行业的发展前景
  • 外网平面设计网站广州做seo的公司
  • 做网站需要学数据库吗国内疫情最新消息
  • 遵义城乡住房建设厅网站武汉网站seo推广
  • 做网站工资高么网络营销的概念和特点
  • 北京做网站的好公司樱桃磁力bt天堂
  • 做调查的有哪些网站推广app赚佣金平台有哪些
  • 抚州市网站建设seo系统教程
  • myeclipse做网站的步骤网站代发外链
  • 深圳北站设计者郑州关键词网站优化排名
  • 幼儿园微信公众号如何做微网站网站在线优化工具
  • php网站的客服窗口怎么做seo是什么意思新手怎么做seo
  • 搭建https网站阐述网络营销策略的内容
  • 做项目网站要不要备案在线排名优化
  • 福田做商城网站建设哪家公司靠谱best网络推广平台
  • 响应式网站建设平台百度快照优化排名怎么做
  • 多少钱?seo外包服务
  • 网站建设导航分哪几类网页设计工作室长沙
  • 建设房产网站招商外包公司
  • wordpress访问网站很慢百度seo怎么关闭
  • 呼市企业网站制作外贸推广代理
  • 政府网站建设重要性sem是什么品牌
  • 泛微oa办公系统教程seo外链
  • 阿里云个人网站建设方案书怎样推广产品
  • 网站做短信验证需要多少钱网站seo方法
  • 网页小游戏4933宁波seo优化定制
  • 深圳网站建设智能小程序营销型企业网站的功能