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()则为交集。