一、copy函数原理
templete<typename T> void copy(T* begin,T* end,T* dest)
{
while(begin!=end)
{
*dest++ = *begin++;
}
}
第1个参数表示被拷贝序列的开始位置,第2个参数表示拷贝序列的结束位置,第3个参数表示输出序列的开始位置。注意输出序列的容器大小一定要大于拷贝序列的容器的大小。
二、示例与解析
1、准备工作,要使用copy函数需要引入<algorithm>头文件,简单示例如下:
#include <algorithm>
#include<vector>
using namespace std;
int main(int argc,char** argv)
{
//
int a[] = {10,20,30,40};
const int Size = sizeof(a)/sizeof(a[0]);
vector<int> v1(a,a+Size);
vector<int> v2(Size);
copy(v1.begin(),v1.end(),v2.begin());
return 0 ;
}
容器v2定义时候初始化v2的大小,如果未初始化v2大小或者小于v2的大小,之后使用copy函数将引发异常。
2、准备工作,使用函数back_inserter可无需初始化v2的大小,即back_inserter帮助我们分配大小;使用back_intserter需要引入头文件<iterator>,简单示例如下:
#include <algorithm>
#include<vector>
#include <iterator>
using namespace std;
int main(int argc,char** argv)
{
//
int a[] = {10,20,30,40};
vector<int> v1(a,a+Size);
vector<int> v2;
copy(v1.begin(),v1.end(),back_inserter(v2));
return 0 ;
}
三、equel函数原理
templete<typename T> void copy(T* begin,T* end,T* dest)
{
while(begin!=end)
{
if(*dest++ != *begin++)
{
return false;
}
}
return true;
}
第1参数,序列1开始位置,第2参数,序列1的结束位置,第3参数,序列2的起始位置,进行比较是否相同。
四、示例与解析
#include <algorithm>
#include<vector>
using namespace std;
int main(int argc,char** argv)
{
//
int a[] = {10,20,30,40};
const int Size = sizeof(a)/sizeof(a[0]);
vector<int> v1(a,a+Size);
vector<int> v2(Size);
copy(v1.begin(),v1.end(),v2.begin());
equal(v1.begin(),v1.end(),v2.begin());
return 0 ;
}