C++标准库---已序算法之三合并元素

合并元素


两个已序集合的总和

merge(source1Beg,source1End,source2Beg,source2End,destBeg)

merge(source1Beg,source1End,source2Beg,source2End,destBeg,op)

(1)两者都将源区间[source1Beg,source1End)和[source2Beg,source2End)内的元素合并,使得“以destBeg起始的目标区间”内含两个源区间的所有元素;

(2)目标区间内的所有元素按顺序排列;
(3)两者都返回目标区间内“最后一个被复制元素”的下一位置;

(4)op是一个可有可无的二元判断式,被当做排序准则:
op(elem1,elem2)

(5)源区间没有任何变化;

(6)根据标准,调用者应当确保两个源区间一开始都已序,然而在大多数实做版本中,上述算法可以将两个无序的源区间内的元素合并到一个无序的目标区间中;

(7)调用者必须保证目标区间足够大,要不就得使用插入型迭代器;

(8)目标区间和源区间不得重迭;

(9)list提供了一个特殊成员函数merge(),用来合并两个list;

(10)复杂度:线性;


两个已序集合的并集


set_union(source1Beg,source1End,source2Beg,source2End,destBeg)

set_union(source1Beg,source1End,source2Beg,source2End,destBeg,op)

(1)两者都将源区间[source1Beg,source1End)和[source2Beg,source2End)内的元素合并,得到“以destBeg起始”的目标区间---这个区间内含的元素要不来自第一源区间,要不就来自第二源区间,或同时来自两个源区间;

(2)目标区间内的所有元素都按顺序排序;

(3)同时出现于两个源区间的元素,在并集区间中将只出现一次,不过如果原来的某个源区间内原来就存在重复元素,则目标区间内也会有重复元素---重复的个数是两个源区间内的重复个数的叫大值;

(4)两者都返回目标区间内“最后一个被复制元素”的下一位置;

(5)op是一个可有可无的二元判断式,被当做排序准则:
op(elem1,elem2)

(6)源区间没有任何变化;

(7)调用者必须保证目标区间足够大,要不就得使用插入型迭代器;

(8)调用者应当确保两个源区间一开始都已序;

(9))目标区间和源区间不得重迭;

(10)复杂度:线性;


两个已序集合的交集

set_intersection(source1Beg,source1End,source2Beg,source2End,destBeg)

set_intersection(source1Beg,source1End,source2Beg,source2End,destBeg,op)

(1)两者都将源区间[source1Beg,source1End)和[source2Beg,source2End)内的元素合并,得到“以destBeg起始”的目标区间---这个区间内含的元素不但存在于第一源区间,也存在于第二源区间;

(2)如果某个源区间内原就存在有重复元素,则目标区间内也会有重复元素---重复的个数是两个源区间内的重复个数的较小值;


两个已序集合的差集

set_difference(source1Beg,source1End,source2Beg,source2End,destBeg)

set_difference(source1Beg,source1End,source2Beg,source2End,destBeg,op)

(1)两者都将源区间[source1Beg,source1End)和[source2Beg,source2End)内的元素合并,得到“以destBeg起始”的目标区间---这个区间内含的元素只存在于第一源区间,不存在于第二源区间;

(2)如果某个源区间内原就存在有重复元素,则目标区间内也会有重复元素---重复的个数是第一源区间内的重复个数减去第二源区间内的相应重复个数,如果第二区间内的重复个数大于第一区间内的相应重复个数,目标区间内的对应重复个数将会是零;



set_symmetric_difference(source1Beg,source1End,source2Beg,source2End,destBeg)

set_symmetric_difference(source1Beg,source1End,source2Beg,source2End,destBeg,op)

(1)两者都将源区间[source1Beg,source1End)和[source2Beg,source2End)内的元素合并,得到“以destBeg起始”的目标区间---这个区间内含的元素或存在于第一源区间,或存在于第二源区间,但不同时存在于两院区间内;

(2)如果某个源区间内就存在有重复元素,则目标区间内也会有重复元素---重复的个数是两个源区间内的对应重复元素的个数差额;


综合代码示例:

#include"fuzhu.h"

using namespace std;

int main()
{
	int c1[]={1,2,2,4,6,7,7,9};
	int num1=sizeof(c1)/sizeof(int);

	int c2[]={2,2,2,3,6,6,8,9};
	int num2=sizeof(c2)/sizeof(int);

	cout<<"c1: ";
	copy(c1,c1+num1,ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<"c2: ";
	copy(c2,c2+num2,ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<endl;

	cout<<"merge(): ";
	merge(c1,c1+num1,c2,c2+num2,ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<"set_union(): ";
	set_union(c1,c1+num1,c2,c2+num2,ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<"set_intersection(): ";
	set_intersection(c1,c1+num1,c2,c2+num2,ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<"set_difference(): ";
	set_difference(c1,c1+num1,c2,c2+num2,ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<"set_symmetric_difference(): ";
	set_symmetric_difference(c1,c1+num1,c2,c2+num2,ostream_iterator<int>(cout," "));
	cout<<endl;

	system("pause");
	return 0;
}

运行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++ Boost库是一个广泛使用的开源库集合,为C++提供了许多功能强大的工具和算法。在Boost库中,有一个名为C++11 Boost库的子模块,它专门为支持C++11标准而设计。 C++11标准引入了许多新的语言特性和库组件,以提高编程效率和代码可靠性。而C++11 Boost库则扩展了标准库,为开发者提供了更多的功能和工具。 C++11 Boost库的中文手册是为了方便中国程序员使用该库而编写的文档。该手册详细介绍了C++11 Boost库中各个模块的功能、用法和示例代码。通过阅读中文手册,程序员可以更清晰地了解每个模块的用途,以及如何正确地使用它们。 在C++11 Boost库中,有许多常用的模块,比如smart_ptr模块,提供了智能指针的功能,用于管理动态内存;thread模块,用于创建和管理线程;filesystem模块,提供了对文件和目录的操作等。在中文手册中,为每个模块都提供了详细的说明和示例,帮助开发者快速上手和运用。 总之,C++11 Boost库中的中文手册为中国的程序员提供了方便和便捷的学习和使用Boost库的途径。通过阅读手册,开发者可以更加深入地了解每个模块的使用方法,从而更高效地开发和调试他们的C++程序。 ### 回答2: Boost库是一个C++的开源库集合,提供了丰富的功能和工具,可以帮助开发者更加高效地进行C++编程。Boost库中文手册是对Boost库的相关文档进行中文翻译的版本。 Boost库包含了众多的模块和组件,如智能指针、函数对象、线程、正则表达式、文件系统等,覆盖了C++开发中常用的领域。通过使用Boost库,开发者可以在项目中集成各种功能强大、稳定可靠的组件,提高代码的复用性和可维护性。 Boost库中文手册对于理解和学习Boost库的使用非常有帮助。手册中提供了详细的说明和示例代码,对于各个组件的功能、用法和特性进行了清晰的介绍,使得开发者可以快速上手和了解各个组件的使用细节。 通过学习Boost库中文手册,开发者可以深入了解各个模块和组件的详细功能和使用方法,使得他们能够更加灵活地利用Boost库来解决实际的开发问题。同时,手册中也提供了相应的参考资料和链接,方便开发者进一步扩展他们的学习和实践。 总之,Boost库中文手册是一个非常宝贵的资源,可以帮助开发者更好地利用Boost库进行C++编程。通过掌握Boost库提供的丰富功能和工具,开发者可以在项目中提高代码的效率和质量,同时也能够更好地满足对于C++编程的需求。 ### 回答3: Boost是一个开源的C++库,提供了很多功能丰富的组件,可以帮助开发者更轻松地进行C++程序开发。Boost库中包含了很多不同的模块,涵盖了各种不同的领域和功能。 11-boost库中文手册是指Boost库的第11章,该章节主要介绍了一些与字符串处理相关的功能组件。在这个章节中,我们可以了解到Boost库提供了一些强大的字符串处理工具,可以用于字符串的分割、合并、格式化、替换等操作。 例如,Boost库中的split函数可以帮助我们将一个字符串按照指定的分隔符进行分割,并将分割后的子字符串存入一个容器中。另外,Boost库还提供了format函数,用于格式化字符串,能够方便地将变量插入到字符串中。 此外,Boost库还提供了一些用于字符串匹配和替换的函数,例如regex_match和regex_replace等。这些函数可以帮助开发者高效地进行字符串模式匹配和替换。 总之,11-boost库中文手册是关于Boost库中字符串处理的部分。通过使用Boost库中提供的强大函数和组件,开发者可以更加方便地进行字符串处理和操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值