进一步加强运用STL的能力

wingfiring 2006-01-11 09:35:48
目前,大多数C++程序员应该都了解STL了,很多人也开始使用STL。当年对STL的怀疑和否定的气息逐渐散去,剩下的,就是虔诚和膜拜了吧?
然而,在实际项目中使用stl的兄弟姐妹们,STL尽管很容易上手,但是我们运用STL的水平呢?如果您满足于用用各种容器,这是不够的。大多数程序员对STL的算法知之甚少,而算法可以说是STL中最犀利的工具。如果不能够恰当地运用STL的算法,无疑是入宝山而空返。

有人总结说:STL = 数据结构 + 迭代器 + 算法。
只会使用几大容器不能算得上会用STL,从运用的角度来说,其他部分一样重要。
关于迭代器部分,只是概念,搞清其中的概念,事半功倍。要理解5大类迭代器,可以参考相关书籍,一个是cber(王昕)翻译的一本,还有一本名字好像是stl泛型编程的书,前半部分是概念,后半部分是concept手册,非常好,可以用来总结stl的学习。

STL已经被接受了,使用情况则不容乐观。我会在这个帖子里转贴一些STL运用的技术,目的是希望能够重视运用stl的质量。
...全文
437 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wingfiring 2006-01-12
  • 打赏
  • 举报
回复
cunsh(校友录怎么写?求求大家了?) :
http://www.stlchina.org/documents/EffectiveSTL/index.html
effective stl 中文版.
wingfiring 2006-01-12
  • 打赏
  • 举报
回复
OnlyHappy(说好不打脸):
accumulate确实是更恰当的做法。看来,我还是要多多修炼算法的运用。^_^
foochow 2006-01-11
  • 打赏
  • 举报
回复
多看书,多用就是了...
wingfiring 2006-01-11
  • 打赏
  • 举报
回复
关于排序的讨论文章
http://www.stlchina.org/twiki/bin/view.pl/Main/STLSortAlgorithms
wingfiring 2006-01-11
  • 打赏
  • 举报
回复
是不是经常用for循环对容器的元素遍历?当然,有时候是不得不这么做的。
更多的时候,我们应该使用.....for_each?哦,不,我不是说这个,类似于SQL的统计函数,STL也有这样的一组函数。
count,统计序列中某个元素出现的次数,还有带谓词版本count_if.在关联容器中,有count成员函数。对于成员函数count,有一种惯用法:
if (myset.find(var) != myset.end())
替代为:
if (myset.count(var)) 或者是 if (myset.count(var) > 0);

有count,但是stl并没有sum.我们万全可以自己定义一个sum和sum_if,在统计的时候用得着,而不必去写for循环了。

有过在for循环中复位一个序列吗?fill可以干这件事,fill_n可以填充指定数量的元素。如果填充的数据不是单一值,那么请使用generate和generate_n。
uranuswang 2006-01-11
  • 打赏
  • 举报
回复
谢谢,学习中……
wingfiring 2006-01-11
  • 打赏
  • 举报
回复
首先推荐一本书和一个论坛:
effective stl
http://www.stlchina.org/bbs/

不止一次的有人问:
string有没有成员函数可以转换成大写?然后抱怨说,还是CString好用啊。
是的,string没有这样的成员函数,不意味这stl没有:
transform(str.begin(), str.end(), str.begin(), toupper);
你完全可以把这句重定义成一个inline函数:
template<typename Range>
void toupper(Range& str){
transform(str.begin(), str.end(), str.begin(), std::toupper);
}

忽略大小写的比较呢?这个,在http://www.stlchina.org/可以看到effective stl的中文电子版。在附录中有专门讨论这一问题的文章。
cunsh 2006-01-11
  • 打赏
  • 举报
回复
xuexi;
effective stl 有没电子的啊?
OnlyHappy 2006-01-11
  • 打赏
  • 举报
回复
>有count,但是stl并没有sum.我们万全可以自己定义一个sum和sum_if,在统计的时候用得着,>>而不必去写for循环了。

accumulate..
fangrk 2006-01-11
  • 打赏
  • 举报
回复
effective stl不错

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧