0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

c++之STL算法(三)

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2023-07-18 15:00 次阅读

1.算术生成算法--求和accumulate

算术生成算法头文件< numeric >
算法简介:
	容器区间元素求和:accumulate
	像容器中添加元素:fill

accumulate求和:
	accumulate(const _InIt _First, const _InIt _Last, _Ty _Val)
	形参:_First、_Last --元素区间
	      _Val --累加的起始值
重载版本:
	accumulate(const _InIt _First, const _InIt _Last, _Ty _Val, _Fn _Reduce_op)
	形参:_First、_Last --元素区间
		  _Val --起始值
		  _Reduce_op  --运算规则(加、减、乘、除。。。)
#include < vector >
#include < iostream >
#include < numeric >
#include < functional >
using namespace std;
void test()
{
	vector< int >vtr;
	for (int i = 1; i <= 5; i++)
	{
		vtr.push_back(i);
	}
	auto sum=accumulate(vtr.begin(), vtr.end(), 0);
	cout < < "sum=" < < sum < < endl;
	sum=accumulate(vtr.begin(), vtr.end(), 1, multiplies< int >());
	cout < < "sum=" < < sum < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgZomS2NveATo_JAALy07H5cF0016.png

2.算术生成算法--填充fill

void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val)
函数功能:容器填充
形参:_First、_Last --要填充的区间
      _Val --要填充的值
#include < iostream >
#include < vector >
#include < numeric >
#include < algorithm >
using namespace std;
class Print
{
public:
	void operator()(int val)
	{
		cout < < val < < " ";
	}
};
void test()
{
	vector< int >vtr;
	vtr.resize(10);
	fill(vtr.begin(), vtr.end(), 666);
	for_each(vtr.begin(), vtr.end(), Print());
}
int main()
{
	test();
	system("pause");
	return 0;
}
wKgZomS2N0-AEGp4AALLWR7_uys420.png

3.常用集合算法--求交集set_intersection

常用集合算法:--头文件< algorithm >
	求交集(即两个容器相同元素部分):set_intersection()  
	求并集:set_union()
	求差集:set_different()  
求交集:
  _OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
  _OutIt set_intersection(_First1, _Last1, _First2, _Last2, _Dest);
  形参:_First1、_Last1 --容器1的区间范围
        _First2、_Last2 --容器2的区间范围
		_Dest --结果保存起始迭代器
		_Pred --排序规则
  返回值:返回结果的最后一个元素的下一个位置的迭代器(end)
注意:求交集必须保证元素有序,默认是从小到大
#include < iostream >
#include < vector >
#include < algorithm >
using namespace std;
class Print
{
public:
	void operator()(int val)
	{
		cout < < val < < " ";
	}
};
void test()
{
	vector< int >t1 = { 1,2,3,4,5,6 };
	vector< int >t2 = { 1,3,5,7,8,9 };
	vector< int >t3;
	//设置t3容器大小,min()为获取最小值
	t3.resize(min(t1.size(), t2.size()));
	vector< int >::iterator ret=set_intersection(t1.begin(), t1.end(), t2.begin(), t2.end(), t3.begin());
	set_intersection()
	cout < < "t1与t2的交集为:" < < endl;
	for_each(t3.begin(), ret, Print());
	cout < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgaomS2N8GAeD1EAAPVpJYgtNo056.png

4.常用集合算法--求并集set_union

求并集:
set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
set_union(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,_Pr _Pred)
  形参:_First1、_Last1 --容器1的区间范围
		_First2、_Last2 --容器2的区间范围
		_Dest --结果保存起始迭代器
		_Pred --排序规则
  返回值:返回结果的最后一个元素的下一个位置的迭代器(end)
注意:求并集必须保证元素有序,默认是从小到大
#include < iostream >
#include < algorithm >
#include < vector >
using namespace std;
class print
{
public:
	void operator()(int val)
	{
		cout < < val < < " ";
	}
};
void test()
{
	vector< int >v1 = { 1,3,4,6,8,9 };
	vector< int >v2 = { 2,3,3,4,7,9,10 };
	vector< int >v3;
	v3.resize(v1.size() + v2.size());
	vector< int >::iterator ret=set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
	cout < < "v1与v2的并集:" < < endl;
	for_each(v3.begin(), ret, print());
}
int main()
{
	test();
	system("pause");
}
wKgZomS2OBGAVf5_AAMqEoNpy-A520.png

5.常用集合算法--求差集set_difference

求差集:set_difference()

_OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
_OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
  形参:_First1、_Last1 --容器1的区间范围
		_First2、_Last2 --容器2的区间范围
		_Dest --结果保存起始迭代器
		_Pred --排序规则
  返回值:返回结果的最后一个元素的下一个位置的迭代器(end)
注意:求差集必须保证元素有序,默认是从小到大
#include < iostream >
#include < algorithm >
#include < vector >
using namespace std;
class Print
{
public:
	void operator()(int val)
	{
		cout < < val < < " ";
	}
};
void test()
{
	vector< int >t1 = { 1,3,5,6,7,9,10 };
	vector< int >t2 = { 2,3,5,8,10 };
	//t1与t2的补集:{1,6,7,9};  --除去和t2相同的元素
	//t2与t1的补集:{2,8} --除去和t1相同的元素
	vector< int >t3;
	//t3分配空间
	t3.resize(max(t2.size(), t1.size()));
	auto ret = set_difference(t1.begin(), t1.end(), t2.begin(), t2.end(), t3.begin());
	cout < < "t1与t2的补集:" < < endl;
	for_each(t3.begin(), ret, Print());
	cout < < endl;

	ret = set_difference(t2.begin(), t2.end(), t1.begin(), t1.end(), t3.begin());
	cout < < "t2与t1的补集:" < < endl;
	for_each(t3.begin(), ret, Print());
	cout < < endl;
}

int main()
{
	test();
	system("pause");
}
wKgZomS2OHiADvcTAAPyfG5rMss710.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4456

    浏览量

    90760
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • STL
    STL
    +关注

    关注

    0

    文章

    85

    浏览量

    18213
收藏 人收藏

    评论

    相关推荐

    C++STL算法(1)

    functional定义了一些模板类,用于声明仿函数。
    的头像 发表于 07-18 14:30 613次阅读
    <b class='flag-5'>C++</b>之<b class='flag-5'>STL</b><b class='flag-5'>算法</b>(1)

    C++STL算法(二)

    C++STL算法(二)
    的头像 发表于 07-18 14:49 654次阅读
    <b class='flag-5'>C++</b>之<b class='flag-5'>STL</b><b class='flag-5'>算法</b>(二)

    C++STL算法基础集合类算法,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:32:07

    C++STL算法基础排列组合类算法,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:36:54

    C++零基础教程STL容器篇queue容器,轻松上手C++STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 11:41:21

    C++零基础教程之STL关系类算法,轻松上手C++ STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 12:20:42

    C++零基础教程之STL排列组合算法,轻松上手C++ STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 12:24:24

    C++零基础教程之STL集合类算法,轻松上手C++ STL

    编程语言C++语言
    电子学习
    发布于 :2023年01月14日 12:24:57

    c++算法库的移植问题

    目前有一个算法库 用的c++  用ccs在dsp上可以调试 现在希望把库放在8168的dsp上  需要将c++转换成c 有个工具 mmCC C++-
    发表于 06-21 13:14

    C++ STL的概念及举例

      本篇文章是作者本人使用STL 后的一些看法, 对於想要靠此文章学习STL, 是不可能的. 建议叁后面介绍的一些书入门.   STL的概念   在STL 中, 大至上分三个主要的
    发表于 08-30 11:39 1308次阅读

    STL算法在GIS中的应用

    使用STL 算法实现GIS 算法可以保证它的简洁和高效该文结合C++代码实例抽象出了地理算子的概念应用在GIS 算法当中通过定制适配器来消除
    发表于 06-28 16:55 33次下载

    STL的概述

    C++ STL 是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法,关于 STL 呢,
    的头像 发表于 01-20 17:08 898次阅读
    <b class='flag-5'>STL</b>的概述

    C++STL库中的容器

    前面跟大家介绍过STL库,STL主要是由6大部分组成,其中第一个提到的就是容器,容器在介绍STL中小哥有简单的跟大家介绍过,今天稍微再详细介绍一下
    的头像 发表于 02-21 10:55 687次阅读
    <b class='flag-5'>C++</b>之<b class='flag-5'>STL</b>库中的容器

    C++ STL基本概念是什么

    STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。
    的头像 发表于 02-27 15:56 1063次阅读
    <b class='flag-5'>C++</b> <b class='flag-5'>STL</b>基本概念是什么

    STL内容介绍

    1 什么是STLSTL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(
    的头像 发表于 11-13 11:32 332次阅读
    <b class='flag-5'>STL</b>内容介绍