《我的第一本c++书》学习笔记:STL中一些通用算法(二)

copy():复制容器元素

merge():合并容器元素


以下为copy()代码:

// k.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>


using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
	
	vector<int> vecScoreC1;
	vector<int> vecScoreC2;

	vecScoreC1.push_back(32);
	vecScoreC1.push_back(83);
	vecScoreC1.push_back(94);

	vecScoreC2.push_back(70);
	vecScoreC2.push_back(98);
	vecScoreC2.push_back(73);


	/*正向复制
	vector<int> vecScore;

	vecScore.resize(vecScoreC1.size() + vecScoreC2.size());

	vector<int>::iterator itlast = copy(vecScoreC1.begin(), vecScoreC1.end(), vecScore.begin());

	copy(vecScoreC2.begin(), vecScoreC2.end(), itlast);*/

	/*反向复制,copy_backward()第三个参数表示复制来的元素将从这个位置开始逐个向前放置
	vector<int> vecScore;
	vecScore.resize(vecScoreC1.size() + vecScoreC2.size());
	vector<int>::iterator itlast = copy(vecScoreC1.begin(), vecScoreC1.end(), vecScore.begin());
	copy_backward(vecScoreC2.begin(), vecScoreC2.end(), vecScore.end());*/

	return 0;
}

以下为merge()代码:

// k.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>


using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
	
	vector<int> vecScoreC1;
	vector<int> vecScoreC2;

	vecScoreC1.push_back(32);
	vecScoreC1.push_back(83);
	vecScoreC1.push_back(94);

	vecScoreC2.push_back(70);
	vecScoreC2.push_back(94);
	vecScoreC2.push_back(73);

	/*注意,在merge之前必须将将容器中的数据排列
		vector<int> vecScore;
	vecScore.resize(vecScoreC1.size() + 2*vecScoreC2.size());
	sort(vecScoreC1.begin(), vecScoreC1.end());
	sort(vecScoreC2.begin(), vecScoreC2.end());
	merge(vecScoreC1.begin(), vecScoreC1.end(), vecScoreC2.begin(), vecScoreC2.end(), vecScore.begin());*/

	//如果两个容器中有相同的数据,则可以使用set_union来消除冗余
	vector<int> vecScore;
	vecScore.resize(vecScoreC1.size() + 2*vecScoreC2.size());
	sort(vecScoreC1.begin(), vecScoreC1.end());
	sort(vecScoreC2.begin(), vecScoreC2.end());
	set_union(vecScoreC1.begin(), vecScoreC1.end(), vecScoreC2.begin(), vecScoreC2.end(), vecScore.begin());


	return 0;
}

如果为string代码如下:

// k.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>


using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
	
	vector<string> vecGoods;

	vector<string> vecStationaries;
	vecStationaries.push_back("Pen");
	vecStationaries.push_back("Erase");

	vector<string> vecOfficeSupplies;
	vecOfficeSupplies.push_back("Folder");
	vecOfficeSupplies.push_back("Pen");

	vecGoods.resize(vecStationaries.size() + vecOfficeSupplies.size());

	sort(vecStationaries.begin(), vecStationaries.end());
	sort(vecOfficeSupplies.begin(), vecOfficeSupplies.end());

	 vector<string>::iterator itend = set_union(vecStationaries.begin(), vecStationaries.end(), vecOfficeSupplies.begin(),
		vecOfficeSupplies.end(), vecGoods.begin());

	return 0;
}

注意的是set_union()实际是计算两个容器的并集,STL还提供了set_difference()用来计算两容器的差集,而set_intersection()则为交集。

你可能感兴趣的:(《我的第一本c++书》学习笔记:STL中一些通用算法(二))