用C++ STL复制的不同方法std::copy()、copy_n()、copy_if()、copy_backward()

本文概述

C++ STL中存在各种copy()品种, 它们允许以不同的方式执行复制操作, 所有这些都有自己的用途。这些都在头文件<algorithm>中定义。本文向所有人介绍这些功能, 以供日常编程中使用。

1.copy(strt_iter1, end_iter1, strt_iter2):通用复制函数,用于将一段元素从一个容器复制到另一个容器。它有3个参数:

  • strt_iter1:指向源容器起点的指针, 必须从此处开始复制元素。
  • end_iter1:指向源容器末尾的指针, 直到必须复制元素的位置。
  • strt_iter2:指向目标容器开始的指针, 指向必须开始复制元素的位置。

2. copy_n(strt_iter1, num, strt_iter2):此版本的副本使你可以自由选择必须在目标容器中复制多少个元素。 IT还接受3个论点:

  • strt_iter1:指向源容器起点的指针, 必须从此处开始复制元素。
  • 编号:整数, 指定从strt_iter1开始将多少个数字复制到目标容器。如果输入负数, 则不执行任何操作。
  • strt_iter2:指向目标容器开始的指针, 指向必须开始复制元素的位置。

CPP

//C++ code to demonstrate the working of copy()
//and copy_n()
 
#include<iostream>
#include<algorithm> //for copy() and copy_n()
#include<vector>
using namespace std;
 
int main()
{
     
    //initializing source vector
    vector<int> v1 = { 1, 5, 7, 3, 8, 3 };
    
    //declaring destination vectors
    vector<int> v2(6);
    vector<int> v3(6);
    
    //using copy() to copy 1st 3 elements
    copy(v1.begin(), v1.begin()+3, v2.begin());
    
    //printing new vector
    cout <<"The new vector elements entered using copy() : " ;
    for ( int i=0; i<v2.size(); i++)
    cout <<v2[i] <<" " ;
    
    cout <<endl;
    
    //using copy_n() to copy 1st 4 elements
    copy_n(v1.begin(), 4, v3.begin());
    
    //printing new vector
    cout <<"The new vector elements entered using copy_n() : " ;
    for ( int i=0; i<v3.size(); i++)
    cout <<v3[i] <<" " ;
   
}

输出如下:

The new vector elements entered using copy() : 1 5 7 0 0 0 
The new vector elements entered using copy_n() : 1 5 7 3 0 0

3. copy_if():顾名思义,这个函数根据“条件”的结果进行复制。这是通过第四个参数提供的帮助,一个返回布尔值的函数。

这个函数接受4个参数,其中3个类似于copy(),还有一个附加函数,当返回true时,复制一个数字,否则number不复制。

4. copy_backward():这个函数开始将元素反向复制到目标容器中,并一直复制,直到没有复制所有数字为止。复制从” strt_iter2 “开始,但是是向后的。它还接受与copy()类似的参数。

CPP

//C++ code to demonstrate the working of copy_if()
//and copy_backward()
 
#include<iostream>
#include<algorithm> //for copy_if() and copy_backward()
#include<vector>
using namespace std;
 
int main()
{
     
     //initializing source vector
     vector<int> v1 = { 1, 5, 6, 3, 8, 3 };
         
     //declaring destination vectors
     vector<int> v2(6);
     vector<int> v3(6);
         
     //using copy_if() to copy odd elements
     copy_if(v1.begin(), v1.end(), v2.begin(), []( int i){ return i%2!=0;});
         
     //printing new vector
     cout <<"The new vector elements entered using copy_if() : " ;
     for ( int i=0; i<v2.size(); i++)
     cout <<v2[i] <<" " ;
         
     cout <<endl;
         
     //using copy_backward() to copy 1st 4 elements
     //ending at second last position
     copy_backward(v1.begin(), v1.begin() + 4, v3.begin()+ 5);
         
     //printing new vector
     cout <<"The new vector elements entered using copy_backward() : " ;
     for ( int i=0; i<v3.size(); i++)
     cout <<v3[i] <<" " ;
 
}

输出如下:

The new vector elements entered using copy_if() : 1 5 3 3 0 0 
The new vector elements entered using copy_backward() : 0 1 5 6 3 0

被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C++ STL通过激烈的问题解决过程来训练和掌握这些概念。

来源:

https://www.srcmini02.com/69471.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?