在C ++ STL中复制的不同方法-std :: copy(),copy_n(),copy_if(),copy_backwards()

顾名思义,copy()方法用于通过C ++ STL中可用的各种方法来复制数据。所有方法的功能和参数都不同。这些方法在<algorithm>头文件中可用。让我们讨论每种方法及其功能。

复制(start_i1,end_i1,start_i2)

此方法用于将数据从一个迭代器复制到指定范围内的迭代器,在指定范围内,迭代器的开始和结束元素均包含在内。它接受三种类型的参数,即-

  • Start_i1-它将指向迭代器的初始元素,比方说,i_1,元素将从该元素复制到另一个迭代器,比方说,i_2。

  • End_i1-它将指向迭代器的end元素,比方说i_1,直到将元素复制到另一个迭代器的地方,比方说i_2。

  • Start_i2-它将指向迭代器的初始位置,在该位置将复制元素,即i_2。

返回值-返回一个迭代器,该迭代器指向目标迭代器的末尾,即i_2,直到复制元素为止。

示例

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //创建向量v1-
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //声明大小为空的向量
   vector<int> vec_2(6);
   // using copy() function to copy in vector 2
   copy(vec_1.begin(), vec_1.begin()+4, vec_2.begin());
   //打印新矢量
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

输出结果

此代码的输出将是-

Elements in vector v2 copied from v1: 10 20 30 40

copy_n(start_i1,总计,start_i2)

此方法还用于将数据从一个迭代器复制到另一个迭代器,但它告诉编译器从给定位置开始总共需要复制多少个元素。它接受三种类型的参数,即-

  • Start_i1-它将指向迭代器的初始元素,比方说,i_1,元素将从该元素复制到另一个迭代器,比方说,i_2。

  • 总计-它描述了将从start_i1指定的位置开始复制多少个元素。它可以同时使用正整数和负整数,但是如果它是负值,则将不执行任何运算。

  • Start_i2-它将指向迭代器的初始位置,在该位置将复制元素,即i_2。

返回值-返回一个迭代器,该迭代器指向目标迭代器的末尾,即i_2,直到复制元素为止。

示例

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //创建向量v1-
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //声明大小为空的向量
   vector<int> vec_2(6);
   //使用copy_n()函数复制向量2-
   copy_n(vec_1.begin(), 4, vec_2.begin());
   //打印新矢量
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

输出结果

此代码的输出将是-

Elements in vector v2 copied from v1: 10 20 30 40

copy_if(start_i1,end_i1,start_i2,布尔函数)

此方法用于根据应用于传递给该函数的第四个参数中定义的范围的条件,将数据在指定范围内从一个迭代器复制到另一个迭代器。它采用四种类型的参数,即-

  • Start_i1-它将指向迭代器的初始元素,比方说,i_1,元素将从该元素复制到另一个迭代器,比方说,i_2。

  • End_i1-它将指向迭代器的end元素,比方说i_1,直到将元素复制到另一个迭代器的地方,比方说i_2。

  • Start_i2&minbus; 它将指向迭代器的初始位置,在该位置将复制元素,即i_2。

  • 布尔函数-在此函数中,我们将要施加的条件传递给范围。由于此函数的返回类型为布尔值,它将返回true / false,并根据返回值显示范围元素。

返回值-返回一个迭代器,该迭代器指向目标迭代器的末尾,即i_2,直到复制元素为止。

示例

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //创建向量v1-
   vector<int> vec_1 = { 10, 21, 30, 40, 57 };
   //声明大小为空的向量
   vector<int> vec_2(6);
   //使用copy_if()函数复制向量2-
   copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i){return i%2==0;});
   //打印新矢量
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

输出结果

此代码的输出将是-

Elements in vector v2 copied from v1: 10 30 40 0

copy_backwards(start_i1,end_i1,end_i2)

此方法用于将数据从指定的迭代器向后复制到指定范围内的另一个迭代器,这意味着迭代器将根据其大小移至末尾并粘贴位置元素。它接受三种类型的参数,即-

  • Start_i1-它将指向迭代器的初始元素,比方说,i_1,元素将从该元素复制到另一个迭代器,比方说,i_2。

  • End_i1-它将指向迭代器的end元素,比方说i_1,直到将元素复制到另一个迭代器的地方,比方说i_2。

  • end_i2-它将指向迭代器的结束位置,在该位置将复制元素,即i_2。

返回值-将返回一个迭代器,该迭代器指向目标迭代器的开始元素,即i_2,直到将元素复制到该位置为止。

示例

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //创建向量v1-
   vector<int> vec_1 = { 10, 21, 30, 40, 57,67 };
   //声明大小为空的向量
   vector<int> vec_2(6);
   //使用copy_backward()函数复制向量2-
   copy_backward(vec_1.begin(), vec_1.end()+4, vec_2.begin()+5);
   //打印新矢量
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<vec_2.size(); i++){
      cout<<vec_2[i] << " ";
   }
}

输出结果

此代码的输出将是-

Elements in vector v2 copied from v1: 0 10 21 30 40 0