STL TIPS

写C++程序无可避免的会使用到STL,好的,这并不困难,需要记住的就是:

1.多线程程序使用LOCK来同步访问;

2.在手工循环中避免迭代器失效(注意调用链上可能产生副作用)

而且到目前为止用的最多的就是list和map,只是想要让程序实现功能的话就无非这样就可以了。

但是STL包含的内涵显然要多很多,为了编写出更漂亮的代码,需要多考虑一些东西:

 

1.使用算法优先于手工循环,这样可能效率更高,并且减少出错。

 

.list和map很好,经常够用了。但是有理由需要使用其他的序列容器。首先list不提供随机迭代器,这样导致相应的算法效率低下。

 

.为不同的容器选择合适的操作步骤。

 

.copy等算法并不是insert操作,而是assign操作, 因此它访问的迭代器需要解引用,也就是说,目标容器应该事先有相应的大小(说的是size,而不是capacity)。

 

.连续内存容器(vector, string, dequeue)应该在初始化的时候给出适当的大小。内存分配是非常“重”的工作,尽可能避免。

 

.vector的reserve并不会插入相应的默认元素,它只是要求相应的内存,也就是说它改变了capacity,但是没有改变size,如果之前容器是 empty的,那么它仍然会是empty的。

.使用区间操作优先于单元素操作,和条款1实质相同,避免手工循环,而是用更加高效的做法。

 

.算法要求的仿函数类应该都是:值传递的纯函数类。使用引用参数实例化模板根本编译不过,而C++标准要求算法需要的仿函数类都应该是纯函数类。

 

.成员函数优先于非成员函数的算法。因为非成员函数的算法无法得知实现细节,因为无法进行优化。抽象是需要代价的。

 

.性能关键的时候,inline了的函数类算子比函数指针要高效的多,因为编译器无法对函数指针进行inline操作,即使那个函数是inline的。

 

.使用高级的I/O,标准C++的I/O设计和STL是紧密结合的,istream_iterator和ostream_iterator将输入输出流视为容器的抽象。高级的抽象下,代码漂亮许多。

 

.你所要知道的头文件:

algorithm, numeric, functional, iterator

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值