tinySTL
本人参考《STL源码剖析》“写”了一个低效的STL 子集。代码中有比较详细的注释,可作为阅读《STL源码剖析》的辅助材料。
本项目为本人的练习项目,所以暂时未提供测试,不能保证完全正确。请多多包涵。
至于怎么“低效”了,我后面会整理一些我已经能预见到会低效的实现。敬请期待。
源码
已完成
- 空间配置器
- 普通迭代器
- 反向迭代器
- vector
- list
- deque
- stack
- queue
- heap
- priority_queue
- rb_tree(实现来自GitHub)
- set
- multiset
- map
- multimap
- hashtable(其他 hash 函数参考here)
- unordered_set
- unordered_map
- unordered_multiset
- unordered_multimap
-
type traits
- integral_constant
- true_type
- false_type
- is_same
- remove_const
- remove_volatile
- remove_cv
- is_void
- is_null_pointer
- is_integral
- is_floating_point
- is_array
- is_pointer
- is_lvalue_reference
- is_rvalue_reference
- is_reference
- is_const
- is_volatile
- remove_reference
- add_lvalue_reference
- add_rvalue_reference
- remove_pointer
- __type_traits
-
algorithm
- all_of
- any_of
- none_of
- for_each
- count
- count_if
- mismatch
- find
- find_if
- find_if_not
- find_end
- find_first_of
- adjacent_find
- search
- search_n
- copy
- copy_if
- copy_n
- copy_backward
- move
- move_backward
- remove
- remove_if
- remove_copy
- remove_copy_if
- replace
- replace_if
- replace_copy
- replace_copy_if
- swap
- swap_ranges
- iter_swap
- reverse
- reverse_copy
- rotate
- rotate_copy
- unique
- unique_copy
- is_partitioned
- partition
- partition_copy
- stable_partition
- partition_point
- is_sorted
- is_sorted_until
- sort
- partial_sort
- partial_sort_copy
- stable_sort
- nth_element
- lower_bound
- upper_bound
- binary_search
- equal_range
- merge
- inplace_merge
- includes
- set_difference
- set_intersection
- set_symmetric_difference
- set_union
- max
- max_element
- min
- min_element
- equal
- lexicographical_compare
- is_permutation
- next_permutation
- prev_permutation
-
functional
- hash
- plus
- minus
- multiplies
- divides
- modulus
- negate
- equal_to
- not_equal_to
- greater
- less
- greater_equal
- less_equal
- logical_and
- logical_or
- logical_not
- bit_and
- bit_or
- bit_xor
- identity
- select1st
- select2nd
-
utility
- initializer_list
- forward
- move
- pair
- make_pair
-
numeric
- iota
- accumulate
- inner_product
- adjacent_difference
- partial_sum
-
memory(简单实现)
- shared_ptr
- weak_ptr
- unique_ptr
- addressof
- uninitialized_copy
- uninitialized_copy_n
- uninitialized_fill
- uninitialized_fill_n
-
cstring
- strcpy
- strncpy
- strcat
- strncat
- strxfrm
- strlen
- strcmp
- strncmp
- strchr
- strrchr
- strspn
- strcspn
- strpbrk
- strstr
- strtok
- memchr
- memcpy
- memset
- memmove
TODO
- string
- bind、function
- allocator static成员函数问题
- dynamic_bitset
感悟
- 侯捷老师说过:“源码之前,了无秘密”。在自己”抄“了一遍容器代码之后,进一步熟悉了
STL
。对于选择不同的容器解决不同的问题,在知其所以然的情况下,自己更有信心能选出一个合适的容器了。 - 开始明白拷贝(移动)构造函数、复制函数的意义和使用场景。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。