天天用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小技巧的更多相关文章

  1. (译)你应该知道的jQuery小技巧

    帮助提高你jQuery应用的简单小技巧 回到顶部按钮 图片预加载 判断图片是否加载完 自动修补破损图像 Hover切换class类 禁用输入 停止正在加载的链接 toggle fade/slide 简 ...

  2. 前端开发者应该知道的 CSS 小技巧

    一些小技巧让你的CSS技术更专业 使用:not()去除导航上不需要的边框 为body添加行高 垂直居中任何元素 逗号分离的列表 使用负nth-child选择元素 使用SVG图标 文本显示优化 在纯CS ...

  3. 【译】前端开发者都应知道的 jQuery 小技巧

    回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: // Back to top $('a.top').click(f ...

  4. 10个你可能不知道的JavaScript小技巧

    1.变量转换 看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法.始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做 ...

  5. 15个必须知道的 Chrome 开发技巧

    在 Web 开发者中,Chrome 是使用最广泛的浏览器.六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具.你可能已经熟悉了它的部分功能,如使用 console 和 d ...

  6. 除了不要 SELECT * ,程序员使用数据库还应知道的11个技巧

    SQL:sum里加条件SELECT SUM( CASE WHEN "V7010" BETWEEN 0 AND 0.1 THEN 1 ELSE 0 END) FROM "C ...

  7. 12个你未必知道的CSS小知识

    虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...

  8. 一些你需要知道的Python代码技巧

    被人工智能捧红的 Python 已是一种发展完善且非常多样化的语言,其中肯定有一些你尚未发现的功能.本文或许能够让你学到一些新技巧.   Python 是世界上最流行.热门的编程语言之一,原因很多,比 ...

  9. 程序员必需知道的Chrome使用技巧(入门篇)

    浏览器版本 Chrome Canary 新增一些没有经过Google工程师的测试或使用的浏览器功能版本.Chrome Dev让大多数开发人员主要使用此版本来测试对浏览器的重大版本功能版本.Chrome ...

  10. 你未必知道的css小知识

    1:当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如padding-top,padding-bottom,margin-top,margin-bot ...

随机推荐

  1. 链式前向星+dijkstra

    https://leetcode-cn.com/problems/network-delay-time/submissions/ // n <= 100 class Solution { int ...

  2. linux 防火墙管理

    1.查看防火墙状态指令 Firewall-cmd --state 2.关闭防火墙 service firewall stop 3.打开防火墙 service firewall start 4.重启防火 ...

  3. Linux日常指令

    Linux: https://man.linuxde.net/     Linux命令大全  基础指令 终端输入: #shutdown -h now : 立即关机   #ls: 显示路径下所有的文件: ...

  4. 存储SAN

    存储技术介绍 DAS (direct attached storage)  直接连接存储--块级 SAN(storage area network)   存储区域网络--块级 NAS(network ...

  5. java.io.IOException: Cannot run program "phantomjs": CreateProcess error=2, 系统找不到指定的文件

    一.问题 运行该指令的程序找不到phantomjs这个指令 二.解决 1.配置全局变量 注意!!! 要配置系统变量,只配置用户变量,可能还会出现该错误.ps:我就是只配置用户变量,导致一直出错... ...

  6. Ext.form.ComboBox 中如何移除事件,如何添加事件,动态设置事件

    Ext.form.ComboBox 中如何移除事件,如何添加事件 背景: 希望Ext.form.ComboBox动态设置forceSelection属性,动态控制Combobox的可读可写状态,是否允 ...

  7. ES5及ES6的新增特性

    介绍 es表示ECMASCript ,他是从es3,es5,es6,es5是2009.12月发布的,es6是2015.6月发布的.vue2完全支持es5的(vue3完全支持es6的),react完全支 ...

  8. Android 自定义SeekBar (二)

    一.前言 本文在 上节 的基础上,讲解自定义拖动条的实现思路. 二.思路 先在res/values文件夹下,自定义控件属性: <?xml version="1.0" enco ...

  9. 02 docker的基本用法

    本章内容 1.OCI 2.docker核心组件--Cgroup与runC 3.docker的架构 4.docker的基本操作 5.安装docker环境 6.创建第一个容器 6.docker容器的状态变 ...

  10. ORACLE ORA-12638:身份证明检索失败

    使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,那不妨直接看 ...