12.C++常用的算法_遍历算法

遍历算法

1. for_each()

有两种方式:
1.普通函数
2.仿函数

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

/*普通函数*/
void print01(int val)
{
	cout << val << " ";
}

/*仿函数*/
class print02
{
public:
	void operator()(int val)
	{
		cout << val << " ";
	}
};

void test01()
{
	vector<int>v;

	for (int i = 0; i < 5; i++)
	{
		v.push_back(i);
	}

	/*普通函数*/
	for_each(v.begin(), v.end(), print01);
	cout << endl;

	/*仿函数*/
	for_each(v.begin(), v.end(), print02());
	cout << endl;

	return;
}


int main()
{
	test01();


	return 0;
}

运行结果

在这里插入图片描述

2. transform()

要注意:需要提前给目标容器开辟空间

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

class print
{
public:
	void operator()(int val)
	{
		cout << val << " ";
	}
};

class Transform
{
public:
	int operator()(int val)
	{
		return val;
	}
};

void test01()
{
	vector<int>v;

	for (int i = 0; i < 5; i++)
	{
		v.push_back(i);
	}

	vector<int>vTarget;
	vTarget.resize(v.size());/*目标容器需要提前开辟空间*/

	transform(v.begin(), v.end(), vTarget.begin(), Transform());

	
	for_each(v.begin(), v.end(), print());
	cout << endl;

	for_each(vTarget.begin(), vTarget.end(), print());
	cout << endl;

	return;
}


int main()
{
	test01();

	return 0;
}

运行结果

在这里插入图片描述

3. find()

要注意:bool operator==(const Person &p)参数里要加const修饰

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

class Person
{
public:
	Person(string name, int age)
	{
		m_name = name;
		m_age = age;
	}

	bool operator==(const Person &p)
	{
		if (this->m_name == p.m_name && this->m_age == p.m_age)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	string m_name;
	int m_age;
};
void test01()
{
	vector<int>v;

	for (int i = 0; i < 5; i++)
	{
		v.push_back(i);
	}

	/*在v容器中查找5这个元素*/
	vector<int>::iterator pos = find(v.begin(), v.end(), 4);

	if (pos == v.end())
	{
		cout << "没找到该元素" << endl;
	}
	else
	{
		cout << "找到该元素,为:" << *pos << endl;
	}

	return;
}

void test02()/*测试自定义数据类型*/
{
	Person p1("刘备", 26);
	Person p2("曹操", 30);
	Person p3("赵云", 28);

	Person pp("赵云", 28);

	vector<Person>v;

	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);

	vector<Person>::iterator pos = find(v.begin(), v.end(), pp);

	if (pos == v.end())
	{
		cout << "没找到该元素" << endl;
	}
	else
	{
		cout << "找到该元素" << "名字: " << pos->m_name << "  年龄:" << pos->m_age << endl;
	}

	return;
}

int main()
{
	test01();

	cout << endl;

	test02();

	return 0;
}

运行结果

在这里插入图片描述

相关推荐

  1. STL——算法

    2024-04-10 12:34:03       58 阅读
  2. 算法:图

    2024-04-10 12:34:03       34 阅读
  3. 算法模板

    2024-04-10 12:34:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 12:34:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 12:34:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 12:34:03       87 阅读
  4. Python语言-面向对象

    2024-04-10 12:34:03       96 阅读

热门阅读

  1. 2023第十四届蓝桥杯省赛C/C++大学A组题解

    2024-04-10 12:34:03       34 阅读
  2. leetcode2529-正整数和负整数的最大计数

    2024-04-10 12:34:03       32 阅读
  3. Vue文档

    Vue文档

    2024-04-10 12:34:03      27 阅读
  4. LeetCode 15.三数之和

    2024-04-10 12:34:03       36 阅读