【c++】算法(一)

本文介绍了编程中常用的几种算法,包括for_each用于遍历输出,transform搬运容器内容,find查找元素位置,find_if和adjacent_find查找特定条件的元素,binary_search在有序序列中搜索,以及sort、random_shuffle、merge和reverse等排序和随机操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常用遍历算法

@[TOC](目录)

目录

一、常用遍历算法

1.for_each

2.transfom

3.find

二、常用查找算法

1.find_if

2.adjacent_find

3. binary_research

4.count 

5.count_if

三、常用排序算法

1.sort

2.random_shuttle

3.merge

4.reverse


1.for_each

功能:从头到尾遍历

如果想遍历输出,可以这样子:
 

void print(int val)
{
	cout << val << endl;
}
int main()
{
	vector <int>v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	for_each(v.begin(), v.end(), print);
	return 0;
}

2.transfom

功能:将一个容器的所有内容全部搬运到另外一个容器里面

注意:搬运的目标容器要提前开辟空间

void print(int val)
{
	cout << val << endl;
}
class st
{
public:
	int operator ()(int val)
	{
		return val;
	}
};
int main()
{
	vector <int>v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	vector <int>vvv;
	vvv.resize(v.size());
	transform(v.begin(), v.end(), vvv.begin(), st());
	for_each(vvv.begin(), vvv.end(), print);
	return 0;
}

3.find

find(v.begin( ) , v.end( ) , val )  其中val表示要寻找的数

若找到则返回 val 所在的迭代器(指针),否则返回v.end()

 

当查找的不是数组,是一个类的时候,编译器无法进行查找,必须重载运算符==

故需加入以下代码:

二、常用查找算法

1.find_if

find_if (v.begin( ) ,v.end( ) , pre )    pre代表函数或者谓词(返回bool类型的函数)

若找到了,返回pre所在的迭代器,否则返回末尾迭代器

1.提供一个谓词查找

2.对于自定义数据类型

2.adjacent_find

adjacent_find ( v.begin ( ) , v.end ( ) )

查找相邻的重复元素,返回相邻元素第一个的迭代器

-

3. binary_research

必须在有序数列中使用!

查找指定元素是否存在

bool binary_research (v.begin ( ) ,v.end ( ) , value )  找到返回true 否则返回false

	vector <int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	bool ret = binary_search(v.begin(), v.end(), 9);

4.count 

count  ( v.begin( ) , v.end ( ) ,value )  数一下value的值在容器中出现了几次

	vector <int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	int num = count(v.begin(), v.end(), 5);
	cout << "出现了"<<num<<"次";

而在统计自定义的数据类型的时候,注意重载operator ==

5.count_if

功能:有条件的查找出现的个数

count_if  (v.begin( ) ,v.end ( ) ,pre ) ,pre 代表限定的条件

class greater20
{
public:
	bool operator ()(int val)
	{
		return val > 5;
	}

};
int main()
{
	vector <int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	int ret=count_if(v.begin(), v.end(), greater20());
	cout << ret;
	return 0;
}

三、常用排序算法

1.sort

功能:升序排列

sort ( v.begin ( ) ,v.end ( ) , pre )  ,pre代表谓词

当然也可以没有pre这个参数

如果是要降序,可以 sort ( v.begin ( ) ,v.end ( ) , greater( ) )   (注意使用greater 的时候加functional的头文件)

2.random_shuttle

洗牌 指定范围的元素随机调整次序

random_shuttle ( v.begin ( ),v.end ( ) )

记得加随机数种子

3.merge

将两个容器合并在一个容器中,注意v1和v2都必须是有序的 (且都是升序或者都是降序)

merge (v1.begin ( ) , v1.end ( ) , v2.begin ( ) , v2.end ( ) , vvv.begin( ) ),其中vvv代表目标容器初始迭代器

4.reverse

功能:将容器中元素进行翻转

reverse (v.begin( ) ,v,end ( ) ) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值