logo资料库

CSTL参考文档,C下的STL.pdf

第1页 / 共71页
第2页 / 共71页
第3页 / 共71页
第4页 / 共71页
第5页 / 共71页
第6页 / 共71页
第7页 / 共71页
第8页 / 共71页
资料共71页,剩余部分请下载后查看
1. libcstl简介
1.1. 容器和算法
1.2. 迭代器
1.3. libcstl其他组成部分
2. 怎样使用这篇文档
3. 容器
3.1. 序列容器
3.1.1. vector_t
3.1.2. deque_t
3.1.3. list_t
3.1.4. slist_t
3.2. 关联容器
3.2.1. set_t
3.2.2. multiset_t
3.2.3. map_t
3.2.4. multimap_t
3.2.5. hash_set_t
3.2.6. hash_multiset_t
3.2.7. hash_map_t
3.2.8. hash_multimap_t
3.3. 字符串
3.3.1. string_t
3.4. 容器适配器
3.4.1. stack_t
3.4.2. queue_t
3.4.3. priority_queue_t
4. 迭代器
5. 算法
5.1. 非质变算法
5.1.1. algo_for_each
5.1.2. algo_find algo_find_if
5.1.3. algo_adjacent_find algo_adjacent_find_if
5.1.4. algo_find_first_of algo_find_first_if
5.1.5. algo_count algo_count_if
5.1.6. algo_mismatch algo_mismatch_if
5.1.7. algo_equal algo_equal_if
5.1.8. algo_search algo_search_if
5.1.9. algo_search_n algo_search_n_if
5.1.10. algo_search_end algo_search_end_if algo_find_end algo_find_end_if
5.2. 质变算法
5.2.1. algo_copy
5.2.2. algo_copy_n
5.2.3. algo_copy_backward
5.2.4. algo_swap algo_iter_swap
5.2.5. algo_swap_ranges
5.2.6. algo_transform algo_transform_binary
5.2.7. algo_replace algo_replace_if algo_replace_copy algo_replace_copy_if
5.2.8. algo_fill algo_fill_n
5.2.9. algo_generate algo_generate_n
5.2.10. algo_remove algo_remove_if algo_remove_copy algo_remove_copy_if
5.2.11. algo_unique algo_unique_if algo_unique_copy algo_unique_copy_if
5.2.12. algo_reverse algo_reverse_copy
5.2.13. algo_rotate algo_rotate_copy
5.2.14. algo_random_shuffle algo_random_shuffle_if
5.2.15. algo_random_sample algo_random_sample_if algo_random_sample_n algo_random_sample_n_if
5.2.16. algo_partition algo_stable_partition
5.3. 排序算法
5.3.1. algo_sort algo_sort_if algo_stable_sort algo_stable_sort_if algo_is_sorted algo_is_sorted_if
5.3.2. algo_partial_sort algo_partial_sort_if algo_parital_sort_copy algo_partial_sort_copy_if
5.3.3. algo_nth_element algo_nth_element_if
5.3.4. algo_lower_bound algo_lower_bound_if
5.3.5. algo_upper_bound algo_upper_bound_if
5.3.6. algo_equal_range algo_equal_range_if
5.3.7. algo_binary_search algo_binary_search_if
5.3.8. algo_merge algo_merge_if
5.3.9. algo_inplace_merge algo_inplace_merge_if
5.3.10. algo_includes algo_includes_if
5.3.11. algo_set_union algo_set_union_if
5.3.12. algo_set_intersection algo_set_intersection_if
5.3.13. algo_set_difference algo_set_difference_if
5.3.14. algo_set_symmetric_difference algo_set_symmetric_difference_if
5.3.15. algo_push_heap algo_push_heap_if
5.3.16. algo_pop_heap algo_pop_heap_if
5.3.17. algo_make_heap algo_make_heap_if
5.3.18. algo_sort_heap algo_sort_heap_if
5.3.19. algo_is_heap algo_is_heap_if
5.3.20. algo_min algo_min_if
5.3.21. algo_max algo_max_if
5.3.22. algo_min_element algo_min_element_if
5.3.23. algo_max_element algo_max_element_if
5.3.24. algo_lexicographical_compare algo_lexicographical_compare_if
5.3.25. algo_lexicographical_compare_3wap algo_lexicographical_compare_3way_if
5.3.26. algo_next_permutation algo_next_permutation_if
5.3.27. algo_prev_permutation algo_prev_permutation_if
5.4. 算术算法
5.4.1. algo_iota
5.4.2. algo_accumulate algo_accumulate_if
5.4.3. algo_inner_product algo_inner_product_if
5.4.4. algo_partial_sum algo_partial_sum_if
5.4.5. algo_adjacent_difference algo_adjacent_difference_if
5.4.6. algo_power algo_power_if
6. 工具类型
6.1. bool_t
6.2. pair_t
7. 函数类型
7.1. 算术运算函数
7.1.1. plus
7.1.2. minus
7.1.3. multiplies
7.1.4. divides
7.1.5. modulus
7.1.6. negate
7.2. 关系运算函数
7.2.1. equal_to
7.2.2. not_equal_to
7.2.3. less
7.2.4. less_equal
7.2.5. great
7.2.6. great_equal
7.3. 逻辑运算函数
7.3.1. logical_and
7.3.2. logical_or
7.3.3. logical_not
7.4. 其他函数
7.4.1. random_number
7.4.2. default
libcstl 参考手册 for libcstl version 1.0.0 王博 http://libcstl.googlecode.com http://activesys.cublog.cn activesys.wb@gmail.com activesys@sina.com.cn 沈阳
Table of Contents 1.libcstl 简介...........................................................................................................................................................5 1.1.容器和算法..................................................................................................................................................5 1.2.迭代器..........................................................................................................................................................5 1.3.libcstl 其他组成部分...................................................................................................................................5 2.怎样使用这篇文档.............................................................................................................................................6 3.容器......................................................................................................................................................................7 3.1.序列容器......................................................................................................................................................7 3.1.1.vector_t.................................................................................................................................................7 3.1.2.deque_t..................................................................................................................................................9 3.1.3.list_t.....................................................................................................................................................11 3.1.4.slist_t...................................................................................................................................................13 3.2.关联容器....................................................................................................................................................16 3.2.1.set_t.....................................................................................................................................................16 3.2.2.multiset_t.............................................................................................................................................17 3.2.3.map_t...................................................................................................................................................19 3.2.4.multimap_t..........................................................................................................................................21 3.2.5.hash_set_t............................................................................................................................................23 3.2.6.hash_multiset_t...................................................................................................................................25 3.2.7.hash_map_t.........................................................................................................................................27 3.2.8.hash_multimap_t.................................................................................................................................29 3.3.字符串........................................................................................................................................................31 3.3.1.string_t................................................................................................................................................31 3.4.容器适配器................................................................................................................................................37 3.4.1.stack_t.................................................................................................................................................37 3.4.2.queue_t................................................................................................................................................38 3.4.3.priority_queue_t..................................................................................................................................39 4.迭代器................................................................................................................................................................41 5.算法....................................................................................................................................................................42 5.1.非质变算法................................................................................................................................................42 5.1.1.algo_for_each......................................................................................................................................42 5.1.2.algo_find algo_find_if.....................................................................................................................42 5.1.3.algo_adjacent_find algo_adjacent_find_if.......................................................................................42 5.1.4.algo_find_first_of algo_find_first_if...............................................................................................43 5.1.5.algo_count algo_count_if.................................................................................................................43 5.1.6.algo_mismatch algo_mismatch_if...................................................................................................43 5.1.7.algo_equal algo_equal_if.................................................................................................................43 5.1.8.algo_search algo_search_if..............................................................................................................44 5.1.9.algo_search_n algo_search_n_if......................................................................................................44 5.1.10.algo_search_end algo_search_end_if algo_find_end algo_find_end_if.................................44 5.2.质变算法....................................................................................................................................................45 5.2.1.algo_copy............................................................................................................................................45 5.2.2.algo_copy_n........................................................................................................................................45 5.2.3.algo_copy_backward..........................................................................................................................46 5.2.4.algo_swap algo_iter_swap...............................................................................................................46 5.2.5.algo_swap_ranges...............................................................................................................................46 5.2.6.algo_transform algo_transform_binary...........................................................................................46
5.2.7.algo_replace algo_replace_if algo_replace_copy algo_replace_copy_if..................................47 5.2.8.algo_fill algo_fill_n.........................................................................................................................47 5.2.9.algo_generate algo_generate_n........................................................................................................48 5.2.10.algo_remove algo_remove_if algo_remove_copy algo_remove_copy_if...............................48 5.2.11.algo_unique algo_unique_if algo_unique_copy algo_unique_copy_if...................................48 5.2.12.algo_reverse algo_reverse_copy....................................................................................................49 5.2.13.algo_rotate algo_rotate_copy.........................................................................................................49 5.2.14.algo_random_shuffle algo_random_shuffle_if..............................................................................50 5.2.15.algo_random_sample algo_random_sample_if algo_random_sample_n algo_random_sample_n_if...........................................................................................................................50 5.2.16.algo_partition algo_stable_partition..............................................................................................50 5.3.排序算法....................................................................................................................................................51 5.3.1.algo_sort algo_sort_if algo_stable_sort algo_stable_sort_if algo_is_sorted algo_is_sorted_if..........................................................................................................................................51 5.3.2.algo_partial_sort algo_partial_sort_if algo_parital_sort_copy algo_partial_sort_copy_if........51 5.3.3.algo_nth_element algo_nth_element_if...........................................................................................52 5.3.4.algo_lower_bound algo_lower_bound_if........................................................................................52 5.3.5.algo_upper_bound algo_upper_bound_if........................................................................................53 5.3.6.algo_equal_range algo_equal_range_if...........................................................................................53 5.3.7.algo_binary_search algo_binary_search_if.....................................................................................53 5.3.8.algo_merge algo_merge_if..............................................................................................................54 5.3.9.algo_inplace_merge algo_inplace_merge_if...................................................................................54 5.3.10.algo_includes algo_includes_if......................................................................................................54 5.3.11.algo_set_union algo_set_union_if.................................................................................................55 5.3.12.algo_set_intersection algo_set_intersection_if..............................................................................55 5.3.13.algo_set_difference algo_set_difference_if...................................................................................56 5.3.14.algo_set_symmetric_difference algo_set_symmetric_difference_if.............................................56 5.3.15.algo_push_heap algo_push_heap_if..............................................................................................56 5.3.16.algo_pop_heap algo_pop_heap_if.................................................................................................57 5.3.17.algo_make_heap algo_make_heap_if............................................................................................57 5.3.18.algo_sort_heap algo_sort_heap_if.................................................................................................57 5.3.19.algo_is_heap algo_is_heap_if........................................................................................................58 5.3.20.algo_min algo_min_if....................................................................................................................58 5.3.21.algo_max algo_max_if...................................................................................................................58 5.3.22.algo_min_element algo_min_element_if.......................................................................................59 5.3.23.algo_max_element algo_max_element_if.....................................................................................59 5.3.24.algo_lexicographical_compare algo_lexicographical_compare_if...............................................59 5.3.25.algo_lexicographical_compare_3wap algo_lexicographical_compare_3way_if..........................60 5.3.26.algo_next_permutation algo_next_permutation_if........................................................................60 5.3.27.algo_prev_permutation algo_prev_permutation_if.......................................................................60 5.4.算术算法....................................................................................................................................................61 5.4.1.algo_iota..............................................................................................................................................61 5.4.2.algo_accumulate algo_accumulate_if..............................................................................................61 5.4.3.algo_inner_product algo_inner_product_if.....................................................................................61 5.4.4.algo_partial_sum algo_partial_sum_if.............................................................................................62 5.4.5.algo_adjacent_difference algo_adjacent_difference_if...................................................................62 5.4.6.algo_power algo_power_if..............................................................................................................62 6.工具类型............................................................................................................................................................64 6.1.bool_t..........................................................................................................................................................64 6.2.pair_t...........................................................................................................................................................64 7.函数类型............................................................................................................................................................66
7.1.算术运算函数............................................................................................................................................66 7.1.1.plus......................................................................................................................................................66 7.1.2.minus...................................................................................................................................................66 7.1.3.multiplies.............................................................................................................................................67 7.1.4.divides.................................................................................................................................................67 7.1.5.modulus...............................................................................................................................................67 7.1.6.negate..................................................................................................................................................68 7.2.关系运算函数............................................................................................................................................68 7.2.1.equal_to...............................................................................................................................................68 7.2.2.not_equal_to........................................................................................................................................68 7.2.3.less.......................................................................................................................................................69 7.2.4.less_equal............................................................................................................................................69 7.2.5.great.....................................................................................................................................................70 7.2.6.great_equal..........................................................................................................................................70 7.3.逻辑运算函数............................................................................................................................................70 7.3.1.logical_and..........................................................................................................................................70 7.3.2.logical_or............................................................................................................................................71 7.3.3.logical_not...........................................................................................................................................71 7.4.其他函数....................................................................................................................................................71 7.4.1.random_number..................................................................................................................................71 7.4.2.default.................................................................................................................................................71
1. libcstl 简介 libcstl 模仿 SGI STL 写成的,为 C 语言编程提供了通用的数据结构和算法的库。libcstl 提供的数据结构类型是 通用的,它们可以用来保存各种类型的数据。同时 libcstl 还提供了大量的算法用于管理数据结构中的数据。 1.1. 容器和算法 libcstl 容器是结构体类型,可以保存任何类型的数据。如 create_vector(int);就创建了一个用于保存 int 类型的 vector_t 容器类型: vector_t t_v = create_vector(int); libcstl 同样包含一系列算法,算法用来管理容器中的数据。你可以使用逆序算法使容器中的数据逆序: algo_reverse(vector_begin(&t_v), vector_end(&t_v)); 同样这个算法还可以用在其他容器上: deque_t t_dq = create_deque(double); … algo_reverse(deque_begin(&t_dq), deque_end(&t_dq)); 1.2. 迭代器 迭代器是容器和算法的桥梁,算法通过迭代器组成的数据空间就可以管理任何容器,每一容器都提供了与迭 代器相关的操作函数,如 vector_begin()和 vector_end()。libcstl 还提供了很多与迭代器相关的操作函数,如 通过迭代器获得数据,修改数据,获得数据的指针,向前或向后移动迭代器等。 1.3. libcstl 其他组成部分 libcstl 还提供了工具类型:pair_t, bool_t。这些类型是供其他容器类型使用的。此外 libcstl 提供了函数,用来扩 展算法的执行规则。
2. 怎样使用这篇文档 参考手册分为如下几个部分: TYPE: 这部分主要介绍的具体类型。 ITERATOR TYPE: 迭代器类型。 VALUE: 头文件中定义的值。 DESCRIPTION: 类型描述。 DEFINITION: 类型声明的头文件。 OPERATION: 操作函数。有些函数的参数使用 type 和 element 表示,其中 type 表示需要调用该函数时输入具体类型如 vector_t create_vector(type); 如果要创建一个保存 int 类型数据的 vector_t 容器: vector_t t_v = create_vector(int); 如果要创建一个保存自定义类型 struct abc_t 的 vector_t 容器: vector_t t_v = create_vector(struct abc_t); element 表示调用该函数时直接使用常量数据或变量数据如 void vector_push_back(vector_t* pt_vector, element); 如 vector_t 容器中保存的是 int 类型的数据,并要向数据中插入的值为 12,可以直接使用常量数据 12: vector_push_back(&t_v, 12); 也可以传递变量数据 12: int n_value = 12; vector_push_back(&t_v, n_value); 如果 vector_t 容器中保存的是自定义类型,则必须使用变量数据: struct abc_t t_value; … vector_push_back(&t_v, t_value); NOTE: 在调用函数是需要注意的事项。当调用函数需要注意时,函数说明后面会有[1]类似的标志。 PROTOTYPE: 函数原型。 MEMBER: 类型的成员,可以通过类型对象直接使用。
3. 容器 3.1. 序列容器 3.1.1. vector_t TYPE:vector_t ITERATOR TYPE: random_access_iterator_t vector_iterator_t DESCRIPTION: vector_t 容器是序列容器,支持对数据的随机访问。在末尾插入或删除数据花费常数时间,在开头或中间插入 或删除数据花费线性时间。支持动态增长。vector_t 是 libcstl 中最简单的容器类型。 DEFINITION: 创建指定类型的 vector_t 容器。 初始化一个空 vector_t 容器。 初始化一个具有 t_count 个数据的 vector_t 容器,每个数据的值都是 0。 初始化一个具有 t_count 个数据的 vector_t 容器,每个数据的值都是 element。 使用令一个 vector_t 容器初始化 vector_t 容器。 使用数据区间[t_begin, t_end)初始化 vector_t 容器。[1][2] OPERATION: vector_t create_vector(type); void vector_init(vector_t* pt_vector); void vector_init_n( vector_t* pt_vector, size_t t_count); void vector_init_elem( vector_t* pt_vector, size_t t_count, element ); void vector_init_copy( vector_t* pt_vector, const vector_t* cpt_src ); void vector_init_copy_range( vector_t* pt_vector, vector_iterator_t t_begin, vector_iterator_t t_end); void vector_destroy(vector_t* pt_vector); size_t vector_size(const vector_t* cpt_vector); size_t vector_max_size( const vector_t* cpt_vector); bool_t vector_empty(const vector_t* cpt_vector); 判断 vector_t 容器是否为空。 size_t vector_capacity( 获得 vector_t 容器的容量。 const vector_t* cpt_vector); void vector_reserve( vector_t* pt_vector, size_t t_size); bool_t vector_equal( const vector_t* cpt_first, const vector_t* cpt_second); bool_t vector_not_equal( const vector_t* cpt_first, const vector_t* cpt_second); bool_t vector_less( const vector_t* cpt_first, const vector_t* cpt_second); 设置 vector_t 容器的容量。 判断两个 vector_t 容器是否相等。 判断两个 vector_t 容器是否不等。 销毁 vector_t 容器。 获得 vector_t 容器中数据的数目。 获得 vector_t 容器中能够保存的数据的最大数目。 判断第一个 vector_t 容器是否小于第二个 vector_t 容器。
bool_t vector_less_equal( const vector_t* cpt_first, const vector_t* cpt_second); bool_t vector_great( const vector_t* cpt_first, const vector_t* cpt_second); bool_t vector_great_equal( const vector_t* cpt_first, const vector_t* cpt_second); void vector_assign( vector_t* pt_vector, const vector_t* cpt_src ); void vector_assign_elem( vector_t* pt_vector, size_t t_count, element ); void vector_assign_range( vector_t* pt_vector, vector_iterator_t t_begin, vector_iterator_t t_end); void vector_swap( vector_t* pt_first, vector_t* pt_second); void* vector_at( const vector_t* cpt_vector, size_t t_subscript); void* vector_front(const vector_t* cpt_vector); void* vector_back(const vector_t* cpt_vector); vector_iterator_t vector_begin( const vector_t* cpt_vector); vector_iterator_t vector_end( const vector_t* cpt_vector); vector_iterator_t vector_insert( vector_t* pt_vector, vector_iterator_t t_pos, element); vector_iterator_t vector_insert_n( vector_t* pt_vector, vector_iterator_t t_pos, size_t t_count, element); void vector_insert_range( vector_t* pt_vector, vector_iterator_t t_pos, vector_iterator_t t_begin, vector_iterator_t t_end); void vector_push_back( vector_t* pt_vector, element); void vector_pop_back(vector_t* pt_vector); vector_iterator_t vector_erase( vector_t* pt_vector, vector_iterator_t t_pos); vector_iterator_t vector_erase_range( vector_t* pt_vector, vector_iterator_t t_begin, vector_iterator_t t_end); void vector_resize( vector_t* pt_vector, size_t t_resize); void vector_resize_elem( vector_t* pt_vector, size_t t_resize, element ); void vector_clear(vector_t* pt_vector); 判断第一个 vector_t 容器是否小于等于第二个 vector_t 容器。 判断第一个 vector_t 容器是否大于第二个 vector_t 容器。 判断第一个 vector_t 容器是否大于等于第二个 vector_t 容器。 使用另一个 vector_t 容器为当前 vector_t 容器赋值。 使用 t_count 个 element 值给 vector_t 容器赋值。 使用数据区间[t_begin, t_end)为 vector_t 容器赋值。[1][2] 交换两个 vector_t 容器的内容。 使用下标对 vector_t 容器中的数据进行随机访问。 访问 vector_t 容器中的第一个数据。 访问 vector_t 容器中的最后一个数据。 返回指向 vector_t 容器开始的迭代器。 返回指向 vector_t 容器结尾的迭代器。 在 t_pos 前面插入数据 element,并返回指向新数据的迭代器。 在 t_pos 前面插入 t_count 个数据 element,并返回指向第一个新数 据的迭代器。 在 t_pos 前面插入数据区间[t_begin, t_end)。[1][2] 将数据 element 插入到 vector_t 容器的末尾。 删除 vector_t 容器的最后一个数据。 删除 t_pos 位置的数据,并返回指向下一个数据的迭代器。 删除数据区间[t_begin, t_end)的数据,并返回指向下一个数据的迭 代器。[1] 重置 vector_t 容器中数据的数目,新增的数据为 0。 重置 vector_t 容器中数据的数目,新增的数据为 element。 清空 vector_t 容器。
分享到:
收藏