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

2.22学习

1、对于顺序容器(vector,list等)erase时,需要将迭代器--,得到上一个元素位置,而对于关联容器(map,set)erase时,erase()会返回一个迭代器指向上一个元素
对于clear()只能清除所有元素,并不能清除分配的内存,只有deque能实现边删除元素边清除内存
map的[]访问元素,如果元素不存在就会在这个位置插入一个默认值进去,而find()是如果元素不存在就返回end()迭代器
2、对于STL的内存优化问题:一级配置器(大块内存),二级配置器(小块内存)
一级配置器就是对malloc()和free()的封装,效率较低,如果分配较小的内存时(<128字节),除了储存数据的信息还有内存块的信息,所以导致内存比较碎片化
二级配置器目的是把零散的内存块整合在一起,以及不用频繁的调用malloc()和free(),核心是内存池+自由链表
内存池就是分配一大块内存,然后把它依次分成8,16,24……的小块,每个小块封装一个自由链表,然后之后分配内存的时候直接去自由链表中领取,不用再调用malloc(),同样在释放的时候也不会调用free()而是会直接返还内存给内存池
image
3、对于vector的push_back()可以替换为emplace_back()这样会直接在尾部创建,减少了拷贝和移动
4、智能指针shared_ptr,这种情况会导致构造一个新的智能指针指向p的地址,执行完fun()就会释放,p就为NULL

点击查看代码
void fun(shared_ptr<int> temp)
{
}
int main()
{int* p = new int(10);fun(shared_ptr<int>(p));//shared_ptr<int> sp1(new int(20));int* q = sp1.get();//返回一个普通指针,指向shared_ptr所管理的对象delete q;//释放掉q后,sp1就变成了悬空指针,使用sp1会导致未定义行为return 0;
}
http://www.jsqmd.com/news/403388/

相关文章:

  • Julia 流程控制
  • 大数据工程师必知:数据生命周期的5大核心环节
  • Bootstrap4 表单
  • 提示工程架构师必知:AI提示系统伦理审查与社会责任的关系
  • Flink异步IO:大数据处理的外部系统集成
  • 大数据时代:为什么描述性分析是数据科学的第一步?
  • Power BI性能调优:处理TB级数据的秘诀
  • 大数据领域的水利科技数据预警
  • P3371 【模板】单源最短路径(弱化版)
  • 金融领域强化学习在多资产类别动态交易执行中的应用
  • 突破数据瓶颈:SSCL-AMC如何用自监督学习革新无线信号调制识别
  • 数据库算子与布隆过滤器
  • Linux mint
  • Python 内置函数详解
  • 现成Comsol流体流动模型:满足各类流体仿真参考需求
  • Servlet 文件上传
  • 洛谷 P3377:[模板] 可并堆 1 ← 左偏树
  • 二分图知识点杂记
  • jQuery 简介
  • MATLAB滑动计算声发射b值或ib值m文件源码资料包(动态最值或全局最值,计算窗口、滑动窗口...
  • 提示工程架构师如何评估AI提示系统效果监测的效果?
  • 深入解析长沙景嘉微电子股份有限公司前端开发工程师(AI与数字化)岗位:技术全景与面试指南
  • 并行多智能体系统的协调测试实战:从轨迹捕获到CI/CD的六个步骤
  • 20260222
  • 跨端开发的技术纵深:中控技术前端工程师岗位全景解析
  • 深耕技术,智绘未来:解析合众思壮应用软件开发岗的核心能力与挑战
  • Python asyncio.gather returns a future aggregating results from the given coroutines/futures.
  • [firewall]
  • 大量小额携程任我行礼品卡高效回收渠道解析 - 京顺回收
  • AI原生应用领域自然语言理解的未来展望