定义:一般不直接改变容器中元素的值,或者在复制到另一区间的过程中改变元素值
一、复制
原型:iterator2 copy(iterator1 first,iterator1 end,iterator2 dest);
定义:copy函数正向遍历序列,如果要把一个区间复制到前端,应该使用copy(),此时目标位置应该在first之前
原型:iterator2 copy_backward(iterator1 first,iterator1 end,iterator2 dest);
定义: copy_backward()函数逆向遍历序列,如果要把一个区间复制到后端,应该使用copy_backward(),此时目标位置dest应该在end后面
二、转换
原型:iterator2 transform(iterator1 first,iterator1 last,iterator2 dest,Unop op);
定义:将[first,last]中每个元素均调用函数op(ele),并将结果写入到以dest为其实的目标区间内,函数返回被转换的最后一个元素的下一个位置
原型:iterator2 transform(iterator1 first1,iterator1 last1,iterator2 first2,iterator3 dest,Binop op);
定义:将[first1,last1]中每个元素以及以first2开始的另一个区间,调用op(ele1,ele2)函数,并把结果存入到以dest开头的另一个区间内
源代码如下:
三、互换
原型:swap(T& a,T& b)
定义:用于交换两个类型相同的容器的所有对象
原型:swap_ranges(iterator1 first1,iterator last1,iterator2 first2)
定义:用于交换容器对象1的[first1,last1]和容器2的first2开始的对应区间
源代码如下:
四、赋值
原型:void fill(iterator first,iterator last,const T& x);
定义:给区间[first,last]赋相同的值x
原型:void fill_n(iterator first,size n,const T& x);
定义:从first开始给容器连续赋n个值x
void generator(iteraor first,iterator last Gen g);
定义:给区间[first,last]赋子进程或者仿函数g返回的值
原型:void generator_n(iterator first,size n,Gen g);
定义:从first开始给容器赋连续n个子进程或者仿函数的返回值
源代码如下:
一、复制
原型:iterator2 copy(iterator1 first,iterator1 end,iterator2 dest);
定义:copy函数正向遍历序列,如果要把一个区间复制到前端,应该使用copy(),此时目标位置应该在first之前
原型:iterator2 copy_backward(iterator1 first,iterator1 end,iterator2 dest);
定义: copy_backward()函数逆向遍历序列,如果要把一个区间复制到后端,应该使用copy_backward(),此时目标位置dest应该在end后面
源代码如下:
#include "stdafx.h"
#include "iostream"
#include "algorithm"
#include "vector"
#include "list"
#include "iterator"
using namespace std;
void print(int& ele)
{
cout<<ele<<" ";
}
int _tmain(int argc, _TCHAR* argv[])
{
int dim[]={1,3,5,7,9,11,32,54,65};
vector<int> v1;
v1.assign(dim,dim+9);
cout<<"vector v1:"<<endl;
for_each(v1.begin(),v1.end(),print);
cout<<endl;
list<int> l1,l2;
copy(v1.begin(),v1.end(),back_inserter(l1));//目标是空容器时要使用插入型迭代器back_inserter
cout<<"list l1:"<<endl;
for_each(l1.begin(),l1.end(),print);
cout<<endl;
//输出l2
l2=l1;
cout<<"list l2:"<<endl;
copy(l2.begin(),l2.end(),ostream_iterator<int>(cout," "));
cout<<endl;
copy_backward(v1.begin()+2,v1.begin()+7,l2.end());
cout<<"list l2(Modified):"<<endl;
copy(l2.begin(),l2.end(),ostream_iterator<int>(cout," "));
cout<<endl;
return 0;
}
二、转换
原型:iterator2 transform(iterator1 first,iterator1 last,iterator2 dest,Unop op);
定义:将[first,last]中每个元素均调用函数op(ele),并将结果写入到以dest为其实的目标区间内,函数返回被转换的最后一个元素的下一个位置
原型:iterator2 transform(iterator1 first1,iterator1 last1,iterator2 first2,iterator3 dest,Binop op);
定义:将[first1,last1]中每个元素以及以first2开始的另一个区间,调用op(ele1,ele2)函数,并把结果存入到以dest开头的另一个区间内
源代码如下:
#include "stdafx.h"
#include "iostream"
#include "algorithm"
#include "vector"
#include "list"
#include "iterator"
using namespace std;
void print(int& ele)
{
cout<<ele<<" ";
}
int _tmain(int argc, _TCHAR* argv[])
{
int dim[]={1,3,5,7,9,11,32,54,65};
vector<int> v1;
v1.assign(dim,dim+9);
cout<<"vector v1:"<<endl;
for_each(v1.begin(),v1.end(),print);
cout<<endl;
list<int> l1,l2;
//l2中D的?元a素?分?别e乘?以?-1
transform(v1.begin(),v1.end(),back_inserter(l1),negate<int>());
cout<<"list l1:";
for_each(l1.begin(),l1.end(),print);
cout<<endl;
//另?外a一?种?用?法?两?个?容Y器?的?元a素?对?应|相?乘?
transform(v1.begin(),v1.end(),l1.begin(),back_inserter(l2),multiplies<int>());
cout<<"list l2:";
for_each(l2.begin(),l2.end(),print);
cout<<endl;
return 0;
}
三、互换
原型:swap(T& a,T& b)
定义:用于交换两个类型相同的容器的所有对象
原型:swap_ranges(iterator1 first1,iterator last1,iterator2 first2)
定义:用于交换容器对象1的[first1,last1]和容器2的first2开始的对应区间
源代码如下:
#include "stdafx.h"
#include "iostream"
#include "algorithm"
#include "vector"
#include "list"
#include "iterator"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int dim[]={1,2,3,4,5,6,7,8,9};
int dim2[]={11,12,13,14,15,16,17,18,19};
vector<int> v1,v2;
v1.assign(dim,dim+9);
cout<<"vector v1:"<<endl;
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
copy(dim2,dim2+9,back_inserter(v2));
cout<<"vector v2:"<<endl;
copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));
cout<<endl;
cout<<"交?换?后?:o"<<endl;
swap(v1,v2);
cout<<"vector v1:"<<endl;
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
cout<<"vector v2:"<<endl;
copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));
cout<<endl;
cout<<"再?次?交?换?部?分?元a素?:o"<<endl;
swap_ranges(v1.begin(),v1.begin()+5,v2.begin());
cout<<"vector v1:"<<endl;
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
cout<<"vector v2:"<<endl;
copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));
cout<<endl;
return 0;
}
四、赋值
原型:void fill(iterator first,iterator last,const T& x);
定义:给区间[first,last]赋相同的值x
原型:void fill_n(iterator first,size n,const T& x);
定义:从first开始给容器连续赋n个值x
void generator(iteraor first,iterator last Gen g);
定义:给区间[first,last]赋子进程或者仿函数g返回的值
原型:void generator_n(iterator first,size n,Gen g);
定义:从first开始给容器赋连续n个子进程或者仿函数的返回值
源代码如下:
#include "stdafx.h"
#include "iostream"
#include "algorithm"
#include "vector"
#include "list"
#include "iterator"
using namespace std;
int Fibonacci()
{
static int r;
static int f1 = 0;
static int f2 = 1;
r = f1+ f2;
f1 = f2;
f2 = r;
return f1;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> v1;
vector<int> v2(5,0),v3(6,0);
int dim[]={1,2,3,4,5,6,7,8,9};
v1.assign(dim,dim+9);
cout<<"vector v1:"<<endl;
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
fill(v1.begin(),v1.begin()+4,9);
cout<<"vector v1:"<<endl;
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
fill_n(v1.begin(),5,20);
cout<<"vector v1:"<<endl;
copy(v1.begin(),v1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
generate(v2.begin(),v2.end(),rand);
cout<<"vector v2:"<<endl;
copy(v2.begin(),v2.end(),ostream_iterator<int>(cout," "));
cout<<endl;
generate_n(v3.begin(),6,Fibonacci);
cout<<"vector v3:"<<endl;
copy(v3.begin(),v3.end(),ostream_iterator<int>(cout," "));
cout<<endl;
return 0;
}