zoukankan      html  css  js  c++  java
  • copy、copy_backward和copy_if的差别

    说明:本文仅供学习交流,转载请标明出处。欢迎转载!

            copy,copy_backward和copy_if是几种经常使用的泛型算法,这三个函数包括在头文件#include<algorithm>中,以下县给出三种函数的原型,再说明三者的差别。

           函数原型

            copy(b,e,b1)。当中b,e,b1都表示迭代器类型;

            copy_backward(b,e,b1),当中b,e,b1都表示迭代器;

            copy_if(b,e,b1,pre),b,e,b1是迭代器类型。pre则是bool类型;

            三者的差别

            copy(b,e,b1):将迭代器范围[b,e)的元素拷贝到以b1为起点(begin)的位置

            copy_backward(b,e,b1):将迭代器范围[b,e)的元素拷贝到以b1为终点(end)的位置;

            copy_if(b,e,b1,pre):将迭代器范围[b,e)中使得pre为真的元素拷贝到以b1为起点的位置。即仅仅将满足条件的元素拷贝到以b1为起点的位置。

            为了更加明显的说明其差别,以下我们给出代码和执行结果:

    #include<iostream>
    #include<vector>
    #include<iterator>//用到几种迭代器
    #include<algorithm>//用到几个泛型算法
    using namespace std;
    
    typedef vector<int> vInt;
    void print(const vInt & v)//输出容器内的元素
    {
    	int i;
    	for(i=0;i<v.size();i++)
    	{
    		cout<<v[i]<<" ";
    	}
    	cout<<endl;
    }
    
    void reset(vInt &v)
    {
    	int i;
    	for (i=0;i<v.size();i++)
    	{
    		v[i]=0;
    	}
    }
    bool GT5(int i)
    {
    	return i>=5;
    }
    int main()
    {
    	vector<int> v1,v2;
    	int i;
    	for(i=1;i<10;i++)
    	{
    		v1.push_back(i);
    	}
    	cout<<"容器v1的元素为:";
    	print(v1);//输出v1的内容
    	v2.resize(v1.size()+5);//将v2当前的大小设置为比v1大5
    	
    	copy(v1.begin(),v1.end(),v2.begin());//调用copy函数
    	cout<<endl<<"调用copy后
    容器v2的元素为:";
        print(v2);//输出v2的内容:1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0
    
    	reset(v2);
    	copy_backward(v1.begin(),v1.end(),v2.end());//调用copy_backward函数
    	cout<<endl<<"调用copy_backward后
    容器v2的元素为:";
    	print(v2);//再输出v2的内容:0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
    
    	reset(v2);
    	copy_if(v1.begin(),v1.end(),v2.begin(),GT5);//调用copy_if函数
    	cout<<endl<<"调用copy_if后
    容器v2的元素为:";
    	print(v2);//输出v2的内容:5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 
    	return 0;
    }

            以上代码在VS2010上调试通过。可是因为VC6.0过老,上面的函数copy_if不能编译,所以建议使用VS或其它叫新的编译器来编译本程序,程序结果例如以下:

            

           

  • 相关阅读:
    方法:常用SQL时间格式
    讨论:C#Calendar赋初始值
    解释:C++虚函数
    方法:C#用session做登陆
    方法:C#在WinForm中如何将Image存入SQL2000和取出显示
    从请求管道深入剖析HttpModule的实现机制,有图有真相
    偶然在网上看到的题目,jQuery功底如何一测便知晓!!!!!!
    MVC2.0中的HtmlHelper大全
    九度 题目1500:出操队形
    九度 题目1528:最长回文子串
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10836401.html
Copyright © 2011-2022 走看看