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

C++学习笔记 44 C++17 std::string_view 字符串优化

一、std::string_view

它本质上只是一个指向现有内存的指针,换句话说,就是一个const char* , 指向其他人拥有的现有字符串,再加上一个大小size

一、现有字符串使用中的多次malloc内存分配

#include<iostream>
#include<string>static uint32_t s_AllocCount = 0;//重写new关键字,统计string对象时分配了多少次内存
void* operator new(size_t size) {s_AllocCount++;std::cout << "Allocationg " << size << " bytes." << std::endl;return malloc(size);
}void PrintName(const std::string& name) {std::cout << name << std::endl;
}void PrintName(std::string_view name) {std::cout << name << std::endl;
}int main() {//release 模式 和 debug模式,allocate的次数不一样//1. 这一行会在堆中分配内存 std::basic_stringstd::string name = "12345678";		//allocate 1次//const char* name = "12345678";//PrintName(name);//2. 直接传递字符串也会触发分配内存//PrintName("Hello World sdadfasdf");
#if 0//创建了新的字符串std::string firstName = name.substr(0, 3);	//allocate 1次std::string secondName = name.substr(4, 9);	//allocate 1次
#elif 1//std::string name 没有新创建字符串std::string_view firstName(name.c_str(), 3);std::string_view secondName(name.c_str() + 4, 9);//const char* name, 这将会将allocate的次数缩减为0//std::string_view firstName(name, 3);//std::string_view secondName(name + 4, 9);
#endifPrintName(firstName);std::cout << s_AllocCount << " allocations" << std::endl;std::cin.get();
}
http://www.gsyq.cn/news/188308.html

相关文章:

  • YOLOv8一站式开发平台:从训练到部署全流程支持
  • YOLOv8自动学习超参数机制AUGMENTTrue说明
  • 降AI率实用指南:从检测逻辑到实际操作一次讲清
  • 我是怎么把论文 AI 率从 98% 降到 3% 的
  • YOLOv8单元测试编写规范与执行方法
  • python中字符串,列表,元组,集合,字典常见的遍历方式整理
  • 北京大学:2025年AI时代的教育变革探索指南|附62页PDF文件下载
  • 【地理加权回归GWR精讲】:基于R语言的空间非平稳性建模秘籍
  • 中序遍历(基于栈的非递归实现)和层序遍历(基于队列的实现)是二叉树遍历中的两种重要方法
  • 论文 AI 率到底怎么降?别再乱改了
  • 天津大学:2025年人工智能赋能大学治理|附59页PDF文件下载
  • 线索二叉树是对普通二叉树的优化结构,旨在提高遍历效率
  • 论文到底怎么降ai率,一文说清楚所有的坑
  • 【环境科学家都在用的AI工具】:基于R语言集成GPT的时空数据分析秘籍
  • 耗时三分钟,我把论文ai率降到了3%
  • YOLOv8子模块管理:git submodule使用方法
  • 为什么你的空间模型总是不显著?R语言LISA聚类分析告诉你真相
  • YOLOv8 Batch Size选择建议:显存与性能平衡
  • YOLOv8模型导出为ONNX格式,跨平台部署更高效
  • YOLOv8轻量级模型yolov8n适用移动端落地场景
  • R语言系统发育分析进阶指南:掌握这6个函数,效率提升300%
  • 解锁效率:测试工具链整合的架构设计与落地实践
  • 为什么conda安装PyTorch时候会安装CUDA Toolkit,而pip则不需要?
  • FOFA技术整合YOLOv8,实现网络空间资产图像识别
  • 【运维必备开发远程工具】专业级远程连接与终端管理工具——MobaXterm 的安装使用详细指南
  • [AI OS] 重新定义人机交互未来
  • Tensorflow 中怎么定义自己的层呢?
  • YOLOv8自定义数据集训练全流程操作手册
  • AI率超标的根本原因,理解这个你才能降下去AI率
  • 【组合导航】全球导航卫星系统、惯性及多传感器组合导航系统原理附matlab代码