当前位置: 首页 > 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.jsqmd.com/news/172461/

相关文章:

  • YOLOv8 Pull Request审查流程详解
  • YOLOv8自动学习超参数机制AUGMENTTrue说明
  • 论文降AI率之前,这些句式不改基本必翻
  • YOLOv8一站式开发平台:从训练到部署全流程支持
  • 读后感二
  • 揭秘R语言交叉验证陷阱:90%数据科学家忽略的3个关键细节
  • Netty 与 Spring Boot + HTTP 客户端(如 RestTemplate、WebClient)应用场景区别
  • YOLOv8 Diskinfo工具使用:监控存储状态防故障
  • 【AI驱动数据科学】:用GPT辅助R语言清洗脏数据的5大黄金法则
  • 降AI率实用指南:从检测逻辑到实际操作一次讲清
  • YOLOv8类别不平衡问题缓解方法
  • 2025年高品质隔热条品牌TOP3,帮你提升家装节能标准 - 睿易优选
  • 生态学者都在用的R分析方法:多元统计模型构建与解读秘籍
  • YOLOv8语义搜索应用场景设想
  • 我是怎么把论文 AI 率从 98% 降到 3% 的
  • 后序遍历的递归算法核心思想是:按照“左子树 → 右子树 → 根节点”的顺序访问二叉树中的每个节点
  • 为了降 AI 率,我把能试的办法都试了一遍
  • 【AI开发避坑指南】LLM是大脑,RAG是记忆,MCP是手脚,Agent是员工?关系大揭秘!
  • YOLOv8单元测试编写规范与执行方法
  • YOLOv8单机多卡训练脚本启动方式
  • python中字符串,列表,元组,集合,字典常见的遍历方式整理
  • 北京大学:2025年AI时代的教育变革探索指南|附62页PDF文件下载
  • 中序遍历(基于栈的非递归实现)和层序遍历(基于队列的实现)是二叉树遍历中的两种重要方法
  • YOLOv8农业领域探索:病虫害识别与统计
  • 从 98% 到3.8%,我的论文降 AI 率全过程
  • 【地理加权回归GWR精讲】:基于R语言的空间非平稳性建模秘籍
  • YOLOv8历史记录追踪:git log高级用法
  • 线索二叉树是一种对普通二叉树进行扩展的数据结构,旨在提高遍历效率
  • 论文 AI 率到底怎么降?别再乱改了
  • Zabbix+Prometheus监控PHP服务,哪个更适合你的业务场景?