STL学习3常用算法3.3常用遍历算法

本文介绍了STL中的三种常用遍历算法:for_each用于无返回值的遍历操作,可以结合适配器进行输出;transform算法则用于转换元素,并需要预先分配目标容器的容量;最后提供了相应的测试程序以验证这些算法的功能。
摘要由CSDN通过智能技术生成

1、for_each 主要功能:遍历

    1.1 有返回值

    1.2 可以绑定参数  进行输出(利用适配器)

2、transformer搬运,目标容器要提前分配容量

3、测试程序

#include"pch.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>

using namespace std;

//遍历算法for_each
//1、for_each的两种用法
void myPrint(int val)
{
	cout << val<< endl;
}
class MyPrint 
{
public:
	void operator()(int val)
	{
		cout << "val= " << val<< endl;
	}
};
void test01()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	//for_each(v.begin(), v.end(), myPrint);//采用回调函数
	for_each(v.begin(), v.end(), MyPrint());//采用函数对象
}

//2、for_each有返回值  为最后的对象
class MyPrint2
{
public:
	void operator()(int val)
	{
		cout << "val= " << val << endl;
		count++;
	}
	int count = 0;
};
void test02()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	MyPrint2 mp=for_each(v.begin(), v.end(), MyPrint2());
	cout << "总共调用次数:" << mp.count << endl;
}

//3、for_each可以绑定参数  进行输出
class MyPrint3:public binary_function<int,int,void>
{
public:
	void operator()(int val,int start)const
	{
		cout << val+start << endl;
		
	}
};
void test03()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	for_each(v.begin(), v.end(),bind2nd( MyPrint3(),1000));

}

//transformer算法 将指定容器区间元素搬运到另一容器中 
//注意:transformer不会给目标分配内存 需要我们提前分配好内存

class MyTransform
{
public:
	int operator()(int val)
	{
		return val+100;
	}
};
//该函数对象还可以在搬运的过程中提供一些其他的操作
void test04()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	vector<int>vTarget;
	//重新指定vTarget大小
	vTarget.resize(v.size());
	transform(v.begin(), v.end(), vTarget.begin(), MyTransform());
	for_each(v.begin(), v.end(), [](int val) {cout << val << endl; });
}
int main()
{
	//test01();
	//test02();
	//test03();
	test04();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值