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

【S13】vector和string优先于动态分配的内存

1、使用new动态分配内存,必须承担如下责任:
  a、使用delete释放内存;
  b、确保使用了正确的形式,delete与new的形式要匹配;
  c、不能重复delete。

2、使用vector和string可以消除以上的负担。每当要动态分配一个数组时,都要考虑使用vector和string替代。如果元素是字符char,使用string。否则使用vector。注意:有一种特殊情况,使用vector<char>更合理。

3、vector和string的元素分配在堆上,它们内部维护一个指针,指向堆上的元素。vector和string是深拷贝,会把元素逐个拷贝。

4、vector和string,它们自己管理内存,内存会自动增长,当它们析构时,会对每个元素逐个析构。

5、vector和string是功能完全的STL序列容器,可以使用很多STL功能。而数组只支持部分STL算法,没有begin,end,size这样的成员方法,也没有iterator这样的嵌套类型,因此STL更好用。

6、为了支持旧的代码,将vector和string转化为数组很简单。

7、有一种特殊情况,需要考虑。string是如此常用,它的使用效率很重要。因此,STL中的string有可能是基于引用计数来实现的。这在多线程中,会出现冲突问题。如果string不是引用计数,而是整体拷贝,多线程就不会有问题,因为每个线程修改自己的副本。

8、对于基于引用计数的string,又运行在多线程环境下,有三种可行的选择:a、禁止引用计数,这种做法不可移植;b、寻找一个不使用引用计数的string;c、考虑vector<char>,代替string。注意:VS2010中的STL,string没有使用引用计数。

相关文章:

  • java程序调用序列,存储过程,函数等
  • mysql 1
  • Spring系列之手写一个SpringMVC
  • SharePoint中List的大Version和小Version的区别
  • 20名香港大学生结束湖南广电实习 回味“湘遇”之旅
  • 已附件的形式发送测试报告
  • 我与51CTO博客园的第一次
  • PCA降维
  • PHP 全局变量
  • 朋友圈继续扩大!科蓝软件联合蚂蚁金服发布“移动金融逸平台”
  • MySQL面试题之如何优化一条有问题的SQL语句?
  • UOJ131 [NOI2015] 品酒大会
  • uoj#349. 【WC2018】即时战略(动态点分治)
  • 未来科技展亮相杭州 七大5G应用领域打开全新想象
  • 在Linux下创建文件,文件名中包含当前时间
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Angular6错误 Service: No provider for Renderer2
  • export和import的用法总结
  • LintCode 31. partitionArray 数组划分
  • Magento 1.x 中文订单打印乱码
  • miaov-React 最佳入门
  • Nodejs和JavaWeb协助开发
  • Python十分钟制作属于你自己的个性logo
  • React Transition Group -- Transition 组件
  • SpiderData 2019年2月25日 DApp数据排行榜
  • storm drpc实例
  • Vue 动态创建 component
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 云大使推广中的常见热门问题
  • ​渐进式Web应用PWA的未来
  • ​油烟净化器电源安全,保障健康餐饮生活
  • (10)STL算法之搜索(二) 二分查找
  • (42)STM32——LCD显示屏实验笔记
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (学习日记)2024.01.09
  • (转)Sql Server 保留几位小数的两种做法
  • (转)一些感悟
  • (转载)Linux 多线程条件变量同步
  • ***测试-HTTP方法
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET大文件上传知识整理
  • .NET序列化 serializable,反序列化
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [20170713] 无法访问SQL Server
  • [C#]winform部署yolov5-onnx模型
  • [codevs 1296] 营业额统计
  • [CQOI 2010]扑克牌
  • [java] 23种设计模式之责任链模式
  • [leetcode top100] 0924 找到数组中消失的数,合并二叉树,比特位计数,汉明距离
  • [leetcode] Multiply Strings