泛型编程与stl

1、理解concept与model的关系
iterator concepts: input iterator 、output iterator、forward iterator、bidirectional

iterator及random access iterator

2、iterator Traits与Associated Types
value_type、difference_type
、reference_type和pointer_type
iterator_category

3、function object concepts:
Generator、Unary Function和Binary Function

4、Container concepts:
Container(input iterator)-->forward Container(forward iterator)-->Reversible Container

(bidirectional iterator)-->Random Access Container(Random access iterator)

Sequences Concepts: 是forward container的强化
stl中包含三种:vector、list和deque
back insertion sequence和front insert sequence
注意安插语义和覆盖语义

associative containers concepts: 是forward container的强化
simple 和 pair
unique 和 multiple
hashed 和 sorted

5、allocators:

6、basic concepts:
assignable:
default constructible:
equality comparable:
lessthan comparable:
strict weakly comparable:如果两元素具有任何一个都不小于另一个的性质,那么将之视为具备某种程度

之等价关系是合理的。

7、iterators:
trivial iterator:
input iterator:
output iterator:不必具有任何特定的“value type”

8、function objects
function objects和adaptable function objects区别:后者是能够被转换为或被用来操作其他function

objects的一种function objects。其嵌套定义了返回类型和参数类型(具体要看adaptable类型)。

predicates:与对应的function object concept完全相同的相关类型,但返回类型必须可以转换为bool

adaptable predicate:

strict weak ordering:
与binary predicate相同的associated types,但有一个额外限制:第一第二参数必须相同。

Random Number Generator:

Hash Function:

10、constructor 和destroy
uninitialized_copy、uninitialized_fill和uninitialized_fill_n
get_temporary_buffer、return_temporary_buffer

11、线性查找:
find、find_if、adjacent_find
find_first_of

12、子序列匹配
search、find_end、search_n

13、计算元素个数
count、count_if

14、for_each

15、比较两个Ranges
equal、mismatch、lexicographical_compare(字典排序法)

16、最大值和最小值
min和max min_element和max_element

17、拷贝某个区间
copy:只能为元素赋新的值而不是产生新的元素,copy不能直接用来将元素安插于空的container之中。
copy_backward:

18、互换元素
swap、iter_swap(很少使用)、swap_ranges

19、transform

20、替换元素
replace、replace_if、replace_copy、replace_copy_if

21、填充整个区间
fill、fill_n、generate、generate_n

22、移除元素:
remove(不会改变container的大小,只是返回一个新的new_last)、remove_if、remove_copy、

remove_copy_if、unique(只对相邻元素进行测试)、unique_copy

23、排列算法
reverse、reverse_copy、rotate、rotate_copy、next_permutation、prev_permutation

24、分割
partition、stable_partition

25、随机重排与抽样
random_shuffle、random_sample、random_sample_n

26、一般化之数值算法
accumulate、inner_product、partial_sum、adjacent_difference

27、排序和查找
sort、stable_sort、partial_sort、partial_sort_copy、nth_element
is_sorted

28、sorted ranges上的操作行为
二分查找法
binary_search、lower_bound、upper_bound、equal_range

合并两个sorted ranges
merge、implace_merge

在sorted ranges身上执行集合相关操作
includes、set_union、set_intersection、set_difference、set_symmetric_difference

29、堆的相关操作
make_heap、push_heap、pop_heap、sort_heap、is_heap

30、insert iterators
front_insert_iterator对应辅助函数 front_inserter
back_insert_iterator对应辅助函数 back_inserter
insert_iterator对应辅助函数inserter

31、stream iterators
istream_iterator
ostream_iterator
istreambuf_iterator
ostreambuf_iterator

32、reverse_iterator

33、raw_storage_iterator

34、Function object Base Classes
unary_function、binary_function

35、算术运算
plus、minus、multiplies、divides、modulus、negate

36、大小比较
equal_to、not_equal_to、less、greater、less_equal、greater_equal

37、逻辑运算

38、证同与投射
select1st、select2nd

39、特殊的function objects
hash、subtractive_rng

40、member function adapters(面向对象编程与泛型编程之间的桥梁)
mem_fun和mem_fun_ref

41、其他的adapters
binder1st、binder2nd、pointer_to_unary_dunction辅助函数ptr_fun、
pointer_to_binary_function辅助函数ptr_fun
unary_negate==》not1
binary_negate==>not2
unary_compose==>compose1 函数合成
binary_compose==>compose2

42、container classes
sequences:vector、deque、list
associative containers:set、map

43、container adapeters
stack、queue、priority_queue

时间: 2024-11-05 22:52:14

泛型编程与stl的相关文章

《泛型编程与STL》读书笔记

通读<泛型编程与STL>,总的感觉是这本书前后反差较大,前半部分非常抽象,后半部分-类似一个API速查手册,相对简单. STL主要涉及三个方面:容器,迭代器,算法,各自职责为:容器存数据,迭代器取数据,算法操纵数据.它们之间的简单关系是:算法通过迭代器操作容器,容器通过迭代器访问自身数据元素.可以说,迭代器做到了让算法和容器解耦,同时,模板又做到了让迭代器与数据类型解耦.迭代器起到了关键的桥梁作用. 迭代器按类型来分可分为五类,名称分别为 InputIterator/OutputIterato

《泛型编程与stl》笔记

以下是STL六大组件(componments): adapters  配接器 用来修饰其他组件.包括iterator adapters.function adapters.container adapters三大类. allocators 配置器 用来分配空间.空间可来自于内存或磁盘--取决于配置器如何 实现.主要用来服务容器. algorithms 算法 如sort,bineary search,permutation.... containers 容器 就是数据结构,用来存放元素.如vect

STL学习小结

STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些"容器"有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的"容器"和算法的集合指的是世界上非常多聪明人非常多年的杰作.是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++差点儿同一时候開始开发的:一開

STL学习总结

STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合.这些"容器"有list, vector,set,map等.STL也是算法和其它一些组件的集合. 这里的"容器"和算法的集合指的是世界上非常多聪明人非常多年的杰作. 是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发.它是与C++差点儿同一时候開始开发的:

STL源码剖析 读书总结

<<STL源码剖析>> 侯捷著 很早就买了这本书, 一直没看, 现在在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法. 看之前我对于泛型编程了解甚少, STL倒使用的比较熟练. 看完这本书之后, 只能表示以前对于STL的使用真是跟小孩玩似得, 只懂其冰山一角. 在真正的深入到源码之后, 对于STL中不容易理解的部分如 迭代器(iterator), 仿函数(functor), 配接器(adapter)才有了一个彻彻底底的了解, 这种东西不看源码光看

泛型编程与STL--各类容器迭代器失效的场景

各类容器迭代器失效的场景: 其实在定义迭代器失效的时:在某些操作完成以后,认为这个迭代器指向的值有变化或者迭代器直接指向不合法的空间,都认为迭代器失效.只要不是指向操作之前的值都认为迭代器失效. 当要将元素安插于vector内,大小与容量之间的差别就变得格外重要.如果vector的大小等于其容量,安插新元素的唯一方法就是增加这个vector的内存总量,这意味得分配一块新的而且更大的内存,再将旧内存块的内容复制到新内存块中,然后归还旧内存块. 一旦vector的内存重新分配,其iterators便

STL 较详尽总结

STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作.是C++ 标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的:一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后

stl allocator源码学习

概述 介绍几个allocator的源码实现:简单的对operator new和operator delete进行封装的实现,vs2015中的实现,STLport中的实现,仿造STLport实现内存池. 1. 参考 http://www.cplusplus.com/reference/memory/allocator/ <STL源码剖析> <C++ Primer 第五版> <Generic Programming and the STL>(<泛型编程和STL>

转载:C++编译期多态与运行期多态

前言 今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出 彩的那部分.在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态:在泛型编程中,多态基于template(模 板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态.在本文中,我们将了解: 什么是运行期多态 什么是编译期多态 它们的优缺点在哪 回到顶部 运行期多态 运行期多态的设计思想要归结到