当前位置:首页 > 公众号精选 > CPP开发者
[导读]STL中稍不注意会产生性能开销的地方STL容器的clear的时间复杂度不是O(1)可能很多人都不在意,在使用STL容器的时候,潜意识里面将clear()成员函数视为常量时间复杂度O(1)的。但是其实不然。我感觉可能是很多人都知道对于vector而言,clear()之后,修改了si...

STL中稍不注意会产生性能开销的地方

STL容器的clear的时间复杂度不是O(1)

可能很多人都不在意,在使用STL容器的时候,潜意识里面将clear()成员函数视为常量时间复杂度O(1)的。但是其实不然。我感觉可能是很多人都知道对于vector而言,clear()之后,修改了size()的结果,不影响capacity()的结果,因而得出clear()只是修改了某个标记,是常量时间复杂度的错误结论。

其实C 标准明确指出不管是序列容器(比如vector)还是关联容器(比如unordered_map)其clear()成员函数都是线性时间复杂度O(n)的。因为只要执行了clear()就需要对其存储的元素调用析构函数,这个析构操作显然是逐个析构的。因而时间复杂度是O(n)。

当然在实践中,也有个例。比如当vector存储基本数据类型或POD类型(比如基本数据类型构成的struct)的时候,由于其元素类型没有析构函数(也不需要析构函数),加之vector内部连续存储的特性,编译器的实现是可以在常量时间完成clear()的。

Linear in size(destructions). This may be optimized to constant complexity for trivially-destructible types(such as scalar or PODs), where elements need not be destroyed

http://www.cplusplus.com/reference/vector/vector/clear

当然仅限于vector存储基本数据类型和POD类型的时候,编译器可能有此优化。如果vector存储的是其他类型的对象,或者是其他容器(比如listmapunordered_map)都是没办法做这个优化的!

所以在工程实践中,我们要思考是否每次都需要及时的clear掉一个容器。比如在后台服务中,有些容器类型的变量在命中某些条件下要进行clear(),后续逻辑中判断容器是空的,就不在用之进行某些逻辑(比如遍历它,进行某种操作)。

其实也可以用一个bool标记来存储后续是否需要遍历该容器,待到本次请求的响应返回给client之后,再来清理这个容器也不迟。

当然这种操作在容器的元素个数不多的时候是完全没有必要的,会丧失一些可读性。不过这种思考还是需要有的。如果元素过多的时候,或许可能是性能优化的一个小点。

auto替代手写类型

比如在基于范围的循环中尽量使用auto
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

腾盛博药生物科技有限公司公布了两项在美国健康志愿者中开展的评估长效BRII-732和BRII-778的1期研究最新数据,这两种在研候选药物旨在用于治疗人类免疫缺陷病毒(HIV)感染。两项研究结果均表明,BRII-732和...

关键字: FIR ST RS

标普500指数今年迄今为止下跌22.7%,但高盛(Goldman Sachs)策略师认为估值依然太高。摩根士丹利旗下的Morgan Stanley Wealth Management称,面对高通胀环境下的利率大幅上升,股...

关键字: DMA MANAGEMENT 高通 ST

奈飞(Netflix)今年早些时候从数据中看到了一个令人担忧的信号:用户访问该流媒体服务的频率下降了。该公司对其用户在四周时间里观看其内容的天数进行了跟踪,并担心访问频率的下降会增加用户取消订阅的可能性。在发现这一问题之...

关键字: 信号 流媒体 TI ST

郑州2022年10月17日 /美通社/ -- 近日,《福布斯》发布了"2022年全球最佳雇主榜单"(The World's Best Employers 2022),中国平安再度上榜并排名全...

关键字: 福布斯 ST TI BSP

苏州2022年10月17日 /美通社/ -- 开拓药业(股票代码:9939.HK),一家专注于潜在同类首创和同类最佳创新药物研发及产业化的生物制药公司,宣布其自主研发、潜在同类首创的福瑞他恩(KX-826)治疗痤疮的中国...

关键字: ST FDA 代码 ADI

(全球TMT2022年10月11日讯)数字网络集成商STL宣布与Vocus Group合作开展西澳大利亚的地平线项目。在此次合作中,STL将为Vocus的国际资本网络扩展计划提供高强度光纤电缆。这项交易加强了STL与V...

关键字: 光纤网络 ST 电缆 GROUP

马斯克(Elon Musk)旗下的SpaceX公司已开始在日本提供运用卫星通信技术的互联网服务“Starlink(星链)”。日本是首个展开该服务的亚洲国家。该公司打算用该服务来抓住日本的山区和离岛等确保通信手段的需求。官...

关键字: LINK ST SPACEX 互联网

Meta在年度大会上发布新款VR头盔Quest Pro,售价1500美元。Quest Pro使用手机内部和周围的摄像头来捕捉面部运动,它可以实时将这些捕捉到的信息应用于用户的头像和表情。 (全球企业动态)...

关键字: VR ST 手机 摄像头

Meta Quest Pro定于本月25日面市,定价1500美元。零售包装内含头戴装置,Quest Touch Pro手柄,充电底座,压感笔尖(手柄附件),部分遮光罩(另有全遮光罩可选)。开发单位宣称Meta Quest...

关键字: ST AN 传感器 GB

金融科技公司Airwallex空中云汇宣布完成1亿美元E2轮融资。现有投资方Square Peg、Salesforce Ventures、红杉中国、Lone Pine Capital、和暄资本、1835i和腾讯参与了本轮...

关键字: AIR API 腾讯 ST

CPP开发者

234 篇文章

关注

发布文章

编辑精选

技术子站

关闭