C++ Primer Plus学习笔记之STL算法

C++ Primer Plus学习笔记之STL算法

STL包含很多处理容器的非成员函数,例如sort(),copy(),find(),transform()...
对于算法函数设计,有两个主要的通用部分。首先,它们都使用模板来提供泛型;其次,它们都使用迭代器来提供访问容器中数据的通用表示。统一的容器设计使得不同的类型的容器之间具有明显的关系。例如,copy()可以将常规数组中的值拷贝到vector中,还可以将vector中的对象拷贝到list中,以及将list中的对象拷贝到set中。
一,算法分类
1,非修改式序列操作
2,修改式序列操作
3,排序和相关操作
4,通用数字运算
二,函数和容器方法
有时既可以选择函数又可以选择STL方法。通常方法是更好地选择,首先,它更适合于特定的容器;其次,作为成员函数,它可以使用模板类的内存管理工具,从而在需要是调整容器的长度。
例如:要删除链表中某个特定的值L.remove(value),所有值为value的元素都被删除,同时链表的长度被自动的调整。
然而remove(L.begin(),L.end(),value)则不能调节链表的长度。
三,STL的使用
STL是一个库,其组成部分被设计成协同工作。STL组件是工具,但也是创建其他工具的基本部件,也就是说,我们可以利用STL的多种容器和算法来实现一个复杂的功能。
四,其他库
接下来介绍的内容是C++ 11d的新内容,需要编译器的支持:
valarray库
valarray是面向数值计算的,不是STL的一部分,它没有push_back(),insert()方法,但是为数学运算提供了一个简单直接的接口。
例如:
valarray<int> v1(10),v2(10),v3(10);
可以直接进行的操作是v3=v1+v2,v3=v1*v2...
如果是容器类的话则需transform(v3.begin(),v3.end(),v3.begin(),bind1st(multiplies<double>(),2.5))
就介绍到这里,如果大家有兴趣的话可以看看这方面的内容,貌似用到的不多。。。
五,STL总结
写到这里,STL的几大重要内容已经告一段落了,下面做一下总结:
1,STL是一个容器类模板,迭代器类模板,函数对象模板和算法类模板的集合,它们的设计是一致的,都是基于泛型编程的原则。算法通过使用模板,从而独立于所存储的对象的类型;通过使用迭代器接口,从而独立于容器的类型。迭代器是广义上的指针。
2,部分算法被设计为容器类方法,但大量的算法都被表示为通用的非成员函数,这是通过将迭代器作为容器和算法之间的接口来实现的。这样的优点是只需要一个find(),copy()这样的函数,而不需要为每种容器提供一个版本,其次可以将STL算法运用于非STL容器。
3,容器和算法都是由其提供或者需要的迭代器类型来表征的。
4,STL还提供了函数对象,函数对象是重载了operator()()的类。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值