c++学习笔记(十一、常用算法)

这一篇只要是介绍了一些STL的常用算法,查找函数、遍历函数、排序函数、拷贝和替换函数、算术生成函数、集合算法。这些算法应该都是比较常用的,所以就过一遍,其实这篇文件我原创内容不多,都是看着黑马程序员c++的视频,把函数抄出来的,希望黑马程序员那边不要介意,有需要看详细的,可以去看看他们的c++视频,是免费的哈哈哈。

11.1 常用查找函数

/*
    find    算法    查找元素
    @param  beg     容器开始迭代器
    @param  end     容器结束迭代器
    @param  value   查找的元素
    @return  iterator 返回查找元素的位置(迭代器)
*/
iterator find(iterator beg, iterator end, value);

/*
    adjacent_find       算法            查找相邻重复元素
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  _callback   回调函数或者谓词(返回bool类型的函数对象)
    @return iterator  返回相邻元素的第一个位置的迭代器(迭代器)
*/
iterator adjacent_find(iterator beg, iterator end, _callback);

/*
    binary_search       算法            二分查找法
    注意:在无序序列中不可用
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  value       查找的元素
    @return  bool       查找返回true 否则false
*/
bool binary_search(iterator beg, iterator end, value);

/*
    find_if       算法            条件查找
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  _callback   回调函数或者谓词(返回bool类型的函数对象)
    @return  iterator   返回第一个满足_callback条件的迭代器
*/
iterator find_if(iterator beg, iterator end, _callback);

/*
    count       算法            统计元素出现次数
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  value       需要统计的元素
    @return  int        返回元素个数
*/
int count(iterator beg, iterator end, value);

/*
    count_if       算法            统计元素出现次数
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  _callback   回调函数或者谓词(返回bool类型的函数对象)
    @return  int        返回满足_callback的元素个数
*/
int count_if(iterator beg, iterator end, _callback);

例子就不用写了吧

11.2 常用遍历函数

/*
    for_each       遍历算法            遍历容器元素
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  _callback   回调函数或者函数对象
    @return  函数对象

    源码:
    template <class _InIt, class _Fn>
    _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func)
*/
_Fn for_each(iterator beg, iterator end, _Fn _callback);

/*
    transform      算法            将指定容器区间元素搬运到另一个容器中
    注意:transform 不会给目标容器分配内存,所以需要我们提前分配好内存(比如vector容器,需要用resize分配内存,而不能使用reserve)
    @param  beg1         源容器开始迭代器
    @param  end1         源容器结束迭代器
    @param  beg2         目标容器开始迭代器
    @param  _callback   回调函数或者函数对象
    @return  返回目标容器的迭代器

    源码:
    template <class _InIt, class _OutIt, class _Fn>
    _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func);
*/
iterator transform(iterator beg1, iterator end1, iterator beg2, _Fn _callback);

这个有点难点,还是写下例子:

Person* show4(Person* p) {
   return p;
}

void main(){
	vector<Person*> vpp;
	vector<Person*> vpp1;
	vpp.push_back(&p1);
	vpp.push_back(&p2);
	vpp.push_back(&p3);
	vpp.push_back(&p4);
	cout << "======================" << endl;
	for_each(vpp.begin(), vpp.end(), mem_fun(&Person::show));
	
	vpp1.resize(vpp.size());    //这是申请空间
	
	transform(vpp.begin(), vpp.end(), vpp1.begin(), show4); //拷贝
	cout << "======================" << endl;
	for_each(vpp1.begin(), vpp1.end(), mem_fun(&Person::show));
}

运行结果:
在这里插入图片描述

11.3 常用排序算法

/*
    merge      算法      容器元素合并,并存储到另一个容器中
    注意:两个容器必须是有序的,不支持随机访问也可以
    @param  beg1         容器 1 开始迭代器
    @param  end1         容器 1 结束迭代器
    @param  beg2         容器 2 开始迭代器
    @param  end2         容器 2 结束迭代器
    @param  dest         目标容器开始迭代器
    @return  返回目标容器的迭代器

    源码:
    template <class _InIt1, class _InIt2, class _OutIt>
    _CONSTEXPR20 _OutIt merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
*/
iterator merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

/*
    sort      算法      容器元素排序
    注意:支持随机访问
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  _callback   回调函数或者谓词(返回bool类型的函数对象)
    @return  void

    源码:
    template <class _RanIt, class _Pr>
    _CONSTEXPR20 void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred)
*/
void sort(iterator beg, iterator end, _callback);

/*
    random_shuffle      算法      对指定范围内的元素随机调整次序
    注意:支持随机访问
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @return  void

    源码:
    template <class _RanIt, class _RngFn>
    void random_shuffle(_RanIt _First, _RanIt _Last, _RngFn&& _RngFunc)

    template <class _RanIt>
    void random_shuffle(_RanIt _First, _RanIt _Last)
*/
void random_shuffle(iterator beg, iterator end);

/*
    reverse      算法      反转指定范围内的元素
    注意:支持随机访问
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @return  void

    源码:
*/
void reverse(iterator beg, iterator end);

排序算法比较简单,就不写例子了。

11.4 常用拷贝和替换算法

/*
    copy      算法      将容器内指定范围的元素拷贝到另一个容器中
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  dest        目标容器迭代器
    @return  iterator   目标容器迭代器

    源码:
*/
iterator copy(iterator beg, iterator end, iterator dest);

/*
    replace      算法      将容器内指定范围的旧元素修改成为新元素
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  oldvalue    旧元素
    @param  mewvalue    新元素
    @return  void

    源码:
    template <class _FwdIt, class _Ty>
    _CONSTEXPR20 void replace(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval)

    不知道为什么要传旧参数,先找到旧参数,然后替换成新参数
*/
void replace(iterator beg, iterator end, oldvalue, mewvalue);

/*
    replace_if      算法      将容器内指定范围满足_callback条件的元素修改成为新元素
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  _callback   回调函数或者谓词(返回bool类型的函数对象)
    @param  mewvalue    新元素
    @return  void

    源码:
    template <class _FwdIt, class _Pr, class _Ty>
    _CONSTEXPR20 void replace_if(const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val)

    _callback  一个回调函数,可以写成大于5的条件
*/
void replace_if(iterator beg, iterator end, _callback, mewvalue);

/*
    swap      算法      互换两个容器的元素
    @param  c1         容器1
    @param  c2         容器2
    @return  void

    源码:
    
*/
void swap(container c1, container c2);

例子也不写了,回调函数还需要看一下别人的。

11.5 常用算术生成算法

#include <numeric>  //包含头文件
/*
    accumulate      算法      计算容器元素累计总和
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  value       算了和之后,如果还要加一个值,就是这个value,如果求合填0
    @return  int       返回和

    源码:
    
*/
int accumulate(iterator beg, iterator end, value);

/*
    fill      算法      向容器中添加元素
    @param  beg         容器开始迭代器
    @param  end         容器结束迭代器
    @param  value       填充元素
    @return  void

    源码:
    
    就是往迭代器中,填充value的值,填充范围是beg-end,就得要申请空间
*/
void fill(iterator beg, iterator end, value);

11.6 常用集合算法

也不是很常用,就是两个集合的交集、并集和差集。

/*
    set_intersection      算法      求两个set集合的交集
    注意:两个集合必须是有序序列
    @param  beg1         容器 1 开始迭代器
    @param  end1         容器 1 结束迭代器
    @param  beg2         容器 2 开始迭代器
    @param  end2         容器 2 结束迭代器
    @param  dest         目标容器开始迭代器
    @return  iterator    目标容器的最后一个元素的迭代器地址

    源码:
    template <class _InIt1, class _InIt2, class _OutIt, class _Pr>
    _CONSTEXPR20 _OutIt set_intersection(
    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)

    template <class _InIt1, class _InIt2, class _OutIt>
    _CONSTEXPR20 _OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
    
*/
iterator set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

/*
    set_union      算法      求两个set集合的并集
    注意:两个集合必须是有序序列
    @param  beg1         容器 1 开始迭代器
    @param  end1         容器 1 结束迭代器
    @param  beg2         容器 2 开始迭代器
    @param  end2         容器 2 结束迭代器
    @param  dest         目标容器开始迭代器
    @return  iterator    目标容器的最后一个元素的迭代器地址

    源码:
    template <class _InIt1, class _InIt2, class _OutIt, class _Pr>
    _CONSTEXPR20 _OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
    
*/
iterator set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

/*
    set_difference      算法      求两个set集合的差集
    注意:两个集合必须是有序序列
    @param  beg1         容器 1 开始迭代器
    @param  end1         容器 1 结束迭代器
    @param  beg2         容器 2 开始迭代器
    @param  end2         容器 2 结束迭代器
    @param  dest         目标容器开始迭代器
    @return  iterator    目标容器的最后一个元素的迭代器地址

    源码:
    template <class _InIt1, class _InIt2, class _OutIt, class _Pr>
    _CONSTEXPR20 _OutIt set_difference(
    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) 

    template <class _InIt1, class _InIt2, class _OutIt>
    _CONSTEXPR20 _OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
    
    beg1 差 beg2 是只有beg1的元素(没有beg2的,也没有beg1和beg2相同的元素)
*/
iterator set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c c 常用算法手册是一份很实用的资料库,主要是为c c程序员们提供了一些常用算法手册,例如排序、查找、字符串、线性表、图等等,这些都是非常实用的计算机编程知识。笔者认为,这份资料可以为广大程序员们提供很好的参考和学习资料。 c c常用算法手册共分为20个章节,每个章节都介绍了一种算法或一组相关算法的原理、实现思路、时间复杂度等内容。这份资料中的算法涉及很广泛,从最常见的排序算法,到有机会遇到的图论算法等等,都有详细的说明,涵盖了很多实际开发应用中的实际问题。 通过这份资料的学习,不仅可以让我们更全面的掌握算法相关知识,还能够培养我们的分析问题、解决方案的思考能力,提高我们的编程效率和代码质量。 如果对 c c 编程有学习需求,我建议大家不妨下载一份 c c 常用算法手册 pdf,用它作为最优秀的指导和帮助,从而让我们更快地成为一名优秀的程序员。 ### 回答2: c c 常用算法手册是一本计算机科学与技术领域的参考书籍。这本书主要介绍了C语言和C++语言中常用的基础算法和数据结构。这些算法和数据结构是计算机程序设计中的基本概念,掌握它们能够提高程序员的编程技能,提升程序性能,使程序更加可靠和稳定。 这本算法手册涵盖了很多知名的算法和数据结构,例如:排序算法、查找算法、字符串算法、图算法、树算法等等。此外,书中附有大量的代码示例,让读者可以直观的理解这些算法的实现细节。读者可以根据自己的需要选择性的阅读书中的内容,而不必过多关注其他有关计算机科学的专业知识。 作为一本C语言和C++语言的经典著作,c c 常用算法手册在计算机程序设计领域有着广泛的应用。对于计算机科学和技术专业的学生以及从事编程工作的程序员来说,这本书是一个不可或缺的参考资料。如果您想深入学习算法和数据结构或者想提高自己的编程技能,不妨下载并阅读这本书籍。 ### 回答3: C语言作为一种通用编程语言,其应用面非常广泛,包括嵌入式系统、网络编程、图像处理、游戏开发等许多领域。在C语言的学习过程中,算法也是必不可少的内容。而《C/C++常用算法手册》作为一本专门针对C/C++算法的教材,具有非常重要的参考价值。 《C/C++常用算法手册》中包含了大量的数据结构和算法的实现方法和应用示例,方便学习者深入理解算法的本质和使用方式。其中包括了常用的排序算法、查找算法、树和图的算法等,同时也包含了一些实用的算法,如字符串匹配算法、最大子序列和算法等。 除了传统的算法实现和优化方式,该手册还介绍了一些新的算法思路和优化方法,如分治法、数学归纳法、贪心算法和动态规划等,让学习者可以更加深入地学习和理解算法的内在逻辑。 《C/C++常用算法手册》同时具有很高的实用性,它并不仅仅是一本理论书籍,而是实践和应用的指南。书中提供了很多实际工作中需要用到的实用算法,如图像处理、字符串操作、网络通信等,让读者可以从中获取到实际工作中的技巧和经验。 提供《C/C++常用算法手册》PDF下载,为学习者提供了更加便捷的途径,可以随时随地进行学习和查阅。同时,PDF格式也便于学习者进行笔记和总结,更好地掌握算法的核心思想和实现方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值