From feeb30d02e16178bd533d8a2df25241b7e3e846c Mon Sep 17 00:00:00 2001 From: Khara0 <2106107467@qq.com> Date: Wed, 8 Jan 2025 20:26:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9algo.h=E4=BD=9C=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MyTinySTL-master/MyTinySTL/algo.h | 93 ++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/src/MyTinySTL-master/MyTinySTL/algo.h b/src/MyTinySTL-master/MyTinySTL/algo.h index b9d9660..85b0fda 100644 --- a/src/MyTinySTL-master/MyTinySTL/algo.h +++ b/src/MyTinySTL-master/MyTinySTL/algo.h @@ -1,4 +1,8 @@ -#ifndef MYTINYSTL_ALGO_H_ +/*这个头文件 algo.h 是 mystl 命名空间中的算法库实现,包含了大量的常用算法,如查找、排序、合并、替换等。 +*/ + + +#ifndef MYTINYSTL_ALGO_H_ #define MYTINYSTL_ALGO_H_ #ifdef _MSC_VER @@ -6,7 +10,9 @@ #pragma warning(disable : 4244) #endif -// 这个头文件包含了 mystl 的一系列算法 +// #ifndef MYTINYSTL_ALGO_H_ 和 #define MYTINYSTL_ALGO_H_ 是头文件保护,防止重复包含。 + +//#ifdef _MSC_VER 是 Microsoft Visual C++ 编译器的特定代码,#pragma warning(push) 和 #pragma warning(disable : 4244) 用于禁用特定的编译器警告(这里是 4244 警告,通常与类型转换相关)。 #include #include @@ -16,6 +22,10 @@ #include "heap_algo.h" #include "functional.h" +// 是标准库头文件,分别用于定义 size_t 类型和时间相关函数。 + +//"algobase.h"、"memory.h"、"heap_algo.h"、"functional.h" 是 mystl 内部的头文件,分别提供了基础算法、内存管理、堆算法和函数对象相关的功能。 + namespace mystl { @@ -2726,6 +2736,85 @@ ForwardIter unique(ForwardIter first, ForwardIter last) return mystl::unique_copy(first, last, first); } +//4. 算法实现 +/*接下来的代码实现了大量的算法,每个算法都有详细的注释。以下是一些关键算法的简要说明: + +4.1 all_of、any_of、none_of +这些算法用于检查区间内的元素是否满足某个条件。 + +all_of 检查区间内所有元素是否都满足条件。 + +any_of 检查区间内是否存在至少一个元素满足条件。 + +none_of 检查区间内是否没有任何元素满足条件。 + +4.2 count、count_if +count 统计区间内等于某个值的元素个数。 + +count_if 统计区间内满足某个条件的元素个数。 + +4.3 find、find_if、find_if_not +find 查找区间内等于某个值的元素。 + +find_if 查找区间内满足某个条件的元素。 + +find_if_not 查找区间内不满足某个条件的元素。 + +4.4 search、search_n +search 在第一个区间内查找第二个区间首次出现的位置。 + +search_n 在区间内查找连续 n 个等于某个值的元素。 + +4.5 lower_bound、upper_bound、binary_search +lower_bound 返回第一个不小于给定值的元素位置。 + +upper_bound 返回第一个大于给定值的元素位置。 + +binary_search 判断区间内是否存在等于给定值的元素。 + +4.6 sort、partial_sort、nth_element +sort 对区间内的元素进行排序。 + +partial_sort 对区间内的部分元素进行排序。 + +nth_element 对区间内的元素进行部分排序,使得第 n 个元素处于正确的位置。 + +4.7 merge、inplace_merge +merge 合并两个有序区间。 + +inplace_merge 在原地合并两个有序区间。 + +4.8 unique、unique_copy +unique 移除区间内相邻的重复元素。 + +unique_copy 将区间内的元素复制到另一个区间,并移除相邻的重复元素。 + +4.9 partition、partition_copy +partition 将区间内的元素根据某个条件分为两部分。 + +partition_copy 将区间内的元素根据某个条件复制到两个不同的区间。 + +4.10 reverse、reverse_copy +reverse 反转区间内的元素顺序。 + +reverse_copy 将区间内的元素反转后复制到另一个区间。 + +4.11 random_shuffle +random_shuffle 随机打乱区间内的元素顺序。 + +4.12 rotate、rotate_copy +rotate 旋转区间内的元素。 + +rotate_copy 将旋转后的区间复制到另一个区间。 + +4.13 is_permutation +is_permutation 判断两个区间是否为彼此的排列组合。 + +4.14 next_permutation、prev_permutation +next_permutation 将区间内的元素排列为下一个字典序排列。 + +prev_permutation 将区间内的元素排列为上一个字典序排列。 +*/ // 重载版本使用函数对象 comp 代替比较操作 template ForwardIter unique(ForwardIter first, ForwardIter last, Compared comp)