ACM需要知道的STL小技巧
天天用stl,但是有一些小技巧如果不知道,偶尔会导致TLE,这里说几个打比赛需要用到的。
主要是大概了解一下其底层原理:https://www.jianshu.com/p/834cc223bb57
就常用的几个:vector,map,unordermap,其他的想到再更新。
1:首先把所有的push_back操作都换成emplace_back
http://c.biancheng.net/view/6826.html
- emplace_back是c++11新东西,和push_back一样的用法,但是效率高。
- push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);
- emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。
2:vector的扩容机制
我们平常用vector用的就是动态,但是vector是有容量限制的,当push_back元素时超过容量上限:会新申请一段更大的空间,并把原来的元素拷贝到新空间。
拷贝过程当然需要耗时,所以当知道自己的vector大概能多少时,可以创建时先申请一些空间,减少拷贝。
3:map和unorder_map
https://www.cnblogs.com/philo-zhou/p/14407862.html
好几次因为这个TLE,直接说结论:
- map的原理就是红黑树,你只需要知道红黑树的插入删除复杂度是0(1),但是查询的复杂度是2*log(N)就行。 红黑树当然是有序的。
- unorder_map的原理是哈希表,复杂度都是O(1)。 哈希表就根据哈希存储的,是无序的。
那么什么时候用map和unorder_map呢?
根据特性就可以知道:看需不需要最后有序地访问,不需要就用unorder_map!!!
ACM需要知道的STL小技巧的更多相关文章
- (译)你应该知道的jQuery小技巧
帮助提高你jQuery应用的简单小技巧 回到顶部按钮 图片预加载 判断图片是否加载完 自动修补破损图像 Hover切换class类 禁用输入 停止正在加载的链接 toggle fade/slide 简 ...
- 前端开发者应该知道的 CSS 小技巧
一些小技巧让你的CSS技术更专业 使用:not()去除导航上不需要的边框 为body添加行高 垂直居中任何元素 逗号分离的列表 使用负nth-child选择元素 使用SVG图标 文本显示优化 在纯CS ...
- 【译】前端开发者都应知道的 jQuery 小技巧
回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: // Back to top $('a.top').click(f ...
- 10个你可能不知道的JavaScript小技巧
1.变量转换 看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法.始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做 ...
- 15个必须知道的 Chrome 开发技巧
在 Web 开发者中,Chrome 是使用最广泛的浏览器.六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具.你可能已经熟悉了它的部分功能,如使用 console 和 d ...
- 除了不要 SELECT * ,程序员使用数据库还应知道的11个技巧
SQL:sum里加条件SELECT SUM( CASE WHEN "V7010" BETWEEN 0 AND 0.1 THEN 1 ELSE 0 END) FROM "C ...
- 12个你未必知道的CSS小知识
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...
- 一些你需要知道的Python代码技巧
被人工智能捧红的 Python 已是一种发展完善且非常多样化的语言,其中肯定有一些你尚未发现的功能.本文或许能够让你学到一些新技巧. Python 是世界上最流行.热门的编程语言之一,原因很多,比 ...
- 程序员必需知道的Chrome使用技巧(入门篇)
浏览器版本 Chrome Canary 新增一些没有经过Google工程师的测试或使用的浏览器功能版本.Chrome Dev让大多数开发人员主要使用此版本来测试对浏览器的重大版本功能版本.Chrome ...
- 你未必知道的css小知识
1:当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如padding-top,padding-bottom,margin-top,margin-bot ...
随机推荐
- Excel—时间函数
时间函数,学习之前先普及一个尝试,微软采用的是1900年纪念方式(数字1,代表的是1900年1月1日,数字1.5 代表的是1900年的1月1日的中午12:00,因为1.5正好是1天半的时间,而一天2 ...
- mybatis plus 分页总查出来全部数据
需要配置过滤器 package com.tyyy.example.coreurl.config; import com.baomidou.mybatisplus.annotation.DbType; ...
- JavaScript基础知识整理(引用类型-Date)
Date Date类型可以用来保存时间,保存的日期可以精确到1970年1月1日之后或之前的100000000天. 要创建Date类型对象,可以使用new操作符加构造函数. var now = new ...
- Navicate 链接 MySQL8.0版本 连接报错问题 1251错误,Clinent does not support authentication protocol requested by server
网上查到的原因是: mysql8 之前的版本中加密规则是mysql_native_password: mysql8之后,加密规则是caching_sha2_password: 找到的解决方法是: 把m ...
- 树莓派4B的Node-Red编程(一)
一.树莓派烧写 二.Node-Red 环境搭建 (一)安装Node.js (二)安装Node-Red (三)启动服务:win+R输入CMD:输入Node-red. (四)进入浏览器127.0.0.1: ...
- 基于LabVIEW的计时器
前言: 最近有人问我,怎么实现一个计时器计时,可以做到启动.停止.重新开始等功能,好久没关于LABVIEW的博文,借这个写个计时器相关内容. 一.Labview时间计时器介绍: 这里采用时间计时器计算 ...
- vue 添加多条数据 添加日期
效果图添加多条数据,日期是具体到天. 后端数据格式time:[ { s_time:' ' , e_time: ' ' }] <p v-for="(item,index) in form ...
- Bugku Log4j2 漏洞题目 解题参考
Log4j2 漏洞题目 题目地址 https://ctf.bugku.com/challenges/detail/id/340.html?page=1 二.攻击环境准备 需要一台linux云服务器,把 ...
- MLR算法双面网络时钟
MLR算法双面网络时钟------专业LED时钟厂家![点击进入] MLR算法双面网络时钟 NTP电子时钟功能说明: 双面NTP电子时钟采用独特结构设计,可根据客户要求订制显示布局:年.月.日.时.分 ...
- Android studio应用
菜单的使用 public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundl ...