我的STL学习反思及心路历程

到这篇就等于是STL的基础用法介绍完了,我本来打算说就继续写一些STL的运用实例的。但是想了想还是写篇自己这段时间来总结STL的一些心得吧。
说实话我这段时间并没有做到自己说的每日一更新,但是并不是我懒,我预期的是,我可以根据《programming abstraction in C++》这本书的介绍讲完STL。但是很可惜,这本书出口的方法,是放在他们学校自己的一个库文件里面的。就比如他们的vector中有这样一个方法:

vec.add(value);

但是我们STL中却没有提供这个方法,所以我在用vs查看的时候,找到的是insert

vec.insert(value);

如果觉得只是个方法名字不同而已,那就错了,他们的实现功能确实很有用,就再提一个:

vec.remove(value);

而在STL的标准库方法中,没有提供这个方法,这时候你可能说,那不是有eraser功能吗?是的,我们也有擦除工具,但是很可惜,我们并不能说直接这样方便使用,这个时候这得这样:

vec.erase(value); // 错误使用
vec.erase(vec.begin() + 1); //正确使用

这个时候,我是问谷老师(Google)得知的用法,然后这里就产生了一个问题,vec.begin()返回的肯定不是一个数值,不然第一种方法不可能不行。深入了解后才知道这个东西叫迭代器(iterator)一个类似于指针的东西(或者说就是指针)。至此,这就是第一个全新的概念出现在我的面前

继续往下,我在写set的时候,我就显得没那么自信了,毕竟发现太多东西还不是很熟悉,不怎么敢写。但我还是继续写了,在我写set集合的时候,在《programming abstraction in C++》这本书中,提供了一些运算,比如说求集合的交 并 补(当然我觉得集合类里面没有定义这些运算确实是让我没想到的),很可惜STL中出口的方法它就是没有啊。但是我不甘心,因为如果没有这些功能那么我们要一个集合的功能也就没什么意义所在了。所以我继续问谷老师。果然,我在这个时间里再次发现了C++库的强大之处,< algorithm >库,对的就是算法库,一个全新的库出现在我的面前,但是我很兴奋,因为首先这个库让我可以更方便的处理一些数据跟字符串 举个例子:

    cout << "顺序排序" << endl; 
    sort(vec.begin(), vec.end());
    outputValue(vec);
    cout << "逆序排序" << endl; 
    reverse(vec.begin(),vec.end());
    outputValue(vec);

短短的几行代码就可以帮我们把我们之前要写的一堆排序代码完成,大大的提高了我们的效率。是不是算找到了宝呢?确实是,但是作为一个计算机专业的学生,我们不是为代码打工的,也不是搬运工,我们是代码的生产者,所以这让我兴奋的第二个原因就是,我可以通过网站去查看这些方法的实现,比如这个sort方法,它是怎么实现的,为什么要有这些参数,很幸运很多网站就有这几个的解释,而且我相信,能写进标准库的方法,都是高质量的代码,这些作者都是一个个顶尖的programmer。我必须由心底里感到敬佩。所以我接下来就准备写这个库STL在里面的运用。

最后一个总结的是map集合吧,这里我再次碰壁,在最简单的初始化中,我们可以用C++标准中,使用参数化的列表,也可以采用第二种方法:

my_map.insert({'f', 6}); //使用参数化的列表
my_map.insert(MapType::value_type('d', 4)); //用第二种方法

可能有人觉得吧,第一种方法不是挺好的吗?而且简短,为什么我们就关注第二种呢?没错确实是,我一开始也是这样子想的,但是当我看到了很多标准的程序都用这个方法时,而且这里有个特别的注释我不得不关注一下:所有的STL容器都支持这个功能;所以我知道这个知识肯定是个宝(事实上,STL中的各个容器初始化也是很多,就得要规范一下了)。当我准备去深入了解的时候,发现了一个C++的关键字 typedef,这又是个新面孔。所以新知识不断呈现在我面前,让我措手不及。

在这里,我并不是说《programming abstraction in C++》这本书不好,相反我一直觉得是教材中的经典。它提供的方法虽然不能直接使用,但是我们完全可以通过我们的知识把它实现。给我们提供了很多思路。而且后面的知识更是让我拍案叫绝。这以后再说。

总结

在学习STL的过程中,我有收获,也有迷茫,中国有句古话:学无止境。我想这次我是深刻体会到了。当我觉得我解决了一个问题后,新的问题就出来了,我感觉就是我是学的越多,知道的越多,了解得越多,就意识到自己,学的太少,知道的太少,了解的太少。这也许就是我们学习前进的动力吧。
接来下的STL实战系列,我就把这段时间学习的新知识写上,希望有大神看到指正 。
下面附上两个实用的网址:
微软的VS库中的解析(官方)https://msdn.microsoft.com/en-us/library/cscc687y.aspx
C++标准库的解析http://www.cplusplus.com/reference/

PS:这些网址都是国外的,全英文,所以英文对于我们还是很重要的。国内的网址我目前没看到有这么权威跟详细的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值