STL源码分析之stl_algo.h中的基本算法

前言

上一节分析了stl_algo.h中的rotate函数实现, 本节我们继续分析该文件的中的其他基本算法, 这些算法功能实现看似很简单, 但是这些算法都能进行衍生, 用户自定义, 简单化了我们的部分编程, 直接使用无需再定义.

基本算法

for_each

将[first, last) 范围的元素由传入仿函数(函数)进行处理, 最后返回仿函数(函数).

template <class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function f) {
   
  for ( ; first != last; ++first)
    f(*first);	// 传入的是右值
  return f;
}

实例:

void For_each(int i)  {
    i = 1; }

void For_func(int i) {
    cout << i << " "; }

int main()
{
   
	vector<int> a(10);
	for_each(a.begin(), a.end(), For_each);	// 尝试初始化值
	for(const auto &i : a)
		cout << i <<  " ";	// 0 0 0 0 0 0 0 0 0 0
	for_each(a.begin(), a.end(), For_func);	// 0 0 0 0 0 0 0 0 0 0

	return 0;
}

很明显尝试初始化值是有问题的, 因为for_each不会修改传入的值, 传入的是右值, 所以一般使用for_each都是实现迭代器的输出, 这样就不用写for循环再来输出了.

find

两个版本.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值