• 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!!!

  • 相关阅读:
    sqlserver字符串拆分(split)方法汇总
    AQS和synchronized
    ReentrantLock和AbstractQueuedSynchronizer
    基于注解实现的策略模式
    堆排序
    无回显下的命令执行判断与利用方式研究
    Linux与windows写入base64编码后的webshell
    使用腾讯云函数上线Cobalt Strike
    javascript实现自适应宽度的瀑布流
    利用iframe实现ajax 跨域通信的解决方案
  • 原文地址:https://www.cnblogs.com/philo-zhou/p/14793184.html
Copyright © 2020-2023  润新知