C++笔记-effective stl

effective stl

熟悉stl本身

  • 慎重选择stl容器,每一种stl容器对应不同的使用场景,比如deque往往比vector更加合适
  • 封装stl容器,积极的使用stl,可以高效的使用它
  • 积极使用其对应迭代器使用的函数,比如做相加运算使用accumulate替代for循环,可以更加高效
  • 调用对应的函数的时候,不使用过于复杂的名称,防止C++编译机制出现错误
  • STL并非线程安全的。它不支持并发的写入。所以在写入之前记得上锁
  • 区别相等与等价:相等指的是里里外外完全相同,等价指的是可能只是外表相同
  • #include的文件总是可以反复编写,因为他的头部都带有ifdefine,完全不用担心
  • 当查询的操作和删除的操作几乎不混在一起的时候,排序的vector会比关联容器更好
  • 不去修改set/mutiset的吉安,修改他们可能会导致位置的行为
  • string的实现的多种多样,所以对应的大小也不是一样的

熟悉stl函数

  • 调用empty而不是size。因为empty始终是常数时间。而size有些时候则是on
  • 对于常见非关联容器,remove/remove-if和erase都是常见的删除用法,他能保证删除元素的同时改变容器大小。list使用remove,关联容器直接使用erase
  • 对于已知容器的大小,可以使用reserve减少string/vector类容器增长所需要的时间,减少不必要的分配
  • 使用swap函数对vector和string快速的放空有奇效,而且速度很快
  • 编写比较函数的时候,我们不仅要保证operator<和less要具有相同的意思,还更要保证要在等值的情况下返回false,保证一个严格的弱序化
  • 对于逐个字符的输入,可以使用istreambuf-iterator
  • 确保使用函数的时候,目标区间足够大,否则会导致一些未知的函数
  • 熟悉常见的排序函数,包括sort,patition等函数
  • 容器的成员函数优先于同名算法
  • 确保判别式是纯函数。考虑函数对象而不是函数作为stl算法的参数

熟悉STL容器内部的对象

  • 确保容器中的对象能高效的拷贝且正确。完整区分开深拷贝和浅拷贝
  • 对于容器中包括了纯指针,记得要在容器对象析构前挨个delete指针。或者使用share-ptr。当然还有remove-erase也是一样

你可能感兴趣的:(C/C++,c++,开发语言,数据结构)