一、常用拷贝和替换算法
1.copy
功能:将容器中指定范围的元素复制到另外一个容器中
copy (v.begin ( ) , v.end ( ) , vvv.begin ( ) ) ,vvv代表目标容器
当然实际上直接v2=v1 ,一个赋值操作直接结束了(这样更简单)
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());
copy(v.begin(), v.end(), vvv.begin());
for_each(vvv.begin(), vvv.end(), print);
2.replace
功能:把指定的旧元素替换成新元素
replace (v.begin ( ) ,v.end ( ) ,oldvalue , newvalue )
注意如果出现多个oldvalue 会把所有的oldvalue 都替换成新的值
vector <int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
cout << "替换前" << endl;
for_each(v.begin(), v.end(), print);
cout << "替换后" << endl;
replace(v.begin(), v.end(), 3, 3333);
for_each(v.begin(), v.end(), print);
3.replace_if
功能:在指定的条件下进行替换元素
与replace不同的是,这个需要把oldplace换成一个谓词
replace (v.begin ( ) ,v.end ( ) , pre , newvalue);
其中谓词(就是一个bool类型的函数)可以这么写
3.swap
功能:交换两个同类型的容器
swap (v1 , v2 )
二、常用的算术生成器
注意加头文件 #include <numeric>
1.accumulate
功能: 累加容器中元素
accumulate ( v.begin( ) , v.end ( ) , num ) ,num代表起始的累加值
vector <int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
int total = accumulate(v.begin(), v.end(),0);
2.fill
向容器填充指定的元素
fill ( v,begin ( ) , v.end ( ) , num ) , num是要填充的值
三、常用的集合算法
1.set_itersection
功能:求两个容器的交集
set_itersection ( v1.begin ( ) ,v1.end ( ) ,v2.begin ( ) ,v2.end ( ) ,target.begin ( ) )
其中v1,v2分别代表要相交集的容器,target表示目标容器
vector <int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
vector <int > vvv;
for (int j = 5; j < 15; j++)
{
vvv.push_back(j);
}
vector <int> t;
t.resize(min(v.size() ,vvv.size()));
vector <int>::iterator m=set_intersection(v.begin(), v.end(), vvv.begin(), vvv.end(), t.begin());
for_each(t.begin(), m, print);
同时注意:1. v1和v2容器中的元素必须是有序的
2. 最后打印的时候是 for_each(t.begin(), m, print);
注意第二个参数是sset_itersection返回的迭代器,不是t.end( )
2.set_union
功能:求两个容器的并集
set_union ( v1.begin ( ) ,v1.end ( ) ,v2.begin ( ) ,v2.end ( ) ,target.begin ( ) )
v1 和v2也都必须是有序容器
3.set_difference
功能:求两个容器的差集(即v2中有哪些元素v1没有)
set_difference ( v1.begin ( ) ,v1.end ( ) ,v2.begin ( ) ,v2.end ( ) ,target.begin ( ) )
v1 和v2也都必须是有序容器