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

本文概述

  • CPP
  • CPP
C++ STL中存在各种copy()品种, 它们允许以不同的方式执行复制操作, 所有这些都有自己的用途。这些都在头文件< algorithm> 中定义。本文向所有人介绍这些功能, 以供日常编程中使用。
1.copy(strt_iter1, end_iter1, strt_iter2):通用复制函数,用于将一段元素从一个容器复制到另一个容器。它有3个参数:
  • strt_iter1:指向源容器起点的指针, 必须从此处开始复制元素。
  • end_iter1:指向源容器末尾的指针, 直到必须复制元素的位置。
  • strt_iter2:指向目标容器开始的指针, 指向必须开始复制元素的位置。
【用C++ STL复制的不同方法std::copy()、copy_n()、copy_if()、copy_backward()】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通过激烈的问题解决过程来训练和掌握这些概念。

    推荐阅读