C++ 算法 复制元素

一 概述
  • C++ 标准库中提供了很多算法,定义于头文件 < algorithm >。本文主要探究以下用于 区间元素复制 的算法:
    • std::copy 将某一范围的元素复制到一个新的位置
    • std::copy_if(C++11) 将某一范围的满足条件的元素复制到一个新的位置
    • std::copy_n(C++11) 将一定数目的元素复制到一个新的位置
    • std::copy_backward 按从后往前的顺序复制一个范围内的元素
二 辅助函数
三 定义
  • copy
template< class InputIt, class OutputIt >
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
  • copy_if
template< class InputIt, class OutputIt, class UnaryPredicate >
OutputIt copy_if( InputIt first, InputIt last, OutputIt d_first, 
                  UnaryPredicate pred );(C++11)
  • copy_n
template< class InputIt, class Size, class OutputIt >
OutputIt copy_n( InputIt first, Size count, OutputIt result );(1)(C++11)(C++20)
template< class InputIt, class Size, class OutputIt >
constexpr OutputIt copy_n( InputIt first, Size count, OutputIt result );(1)(C++20)
template< class ExecutionPolicy, class ForwardIt1, class Size, class ForwardIt2 >
ForwardIt2 copy_n( ExecutionPolicy&& policy, ForwardIt1 first, Size count, ForwardIt2 result );(2)(C++17)
  • copy_backward
template< class BidirIt1, class BidirIt2 >
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );(C++20)
template< class BidirIt1, class BidirIt2 >
constexpr BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );(C++20)
四 Demo
  • 代码
if (1) {
  // std::copy 将某一范围的元素复制到一个新的位置
  std::list<int> l;
  std::vector<int> vc;
  fill(vc, 1, 9);

  print("before copy list: ", l);
  std::copy(vc.begin(), vc.end(), std::back_inserter(l));
  print("after copy list: ", l);
}

if (1) {
  // std::copy_if(C++11) 将某一范围的满足条件的元素复制到一个新的位置
  std::list<int> l;
  std::vector<int> vc;
  fill(vc, 1, 9);

  print("before copy_if list: ", l);
  std::copy_if(vc.begin(), vc.end(), std::back_inserter(l), even);
  print("after copy_if list: ", l);
}

if (1) {
  // std::copy_n(C++11) 将一定数目的元素复制到一个新的位置
  std::list<int> l;
  std::vector<int> vc;
  fill(vc, 1, 9);

  print("before copy_n list: ", l);
  std::copy_n(vc.begin(), 5, std::back_inserter(l));
  print("after copy_n list: ", l);
}

if (1) {
  // std::copy_backyard(C++11) 按从后往前的顺序复制一个范围内的元素
  std::list<int> l(10);
  std::vector<int> vc;
  fill(vc, 1, 9);

  print("before copy_backyard list: ", l);
  std::copy_backward(vc.begin(), vc.end(), l.end());
  print("after copy_backyard list: ", l);
}
  • 结果
before copy list:
after copy list: 1 2 3 4 5 6 7 8 9
before copy_if list:
after copy_if list: 2 4 6 8
before copy_n list:
after copy_n list: 1 2 3 4 5
before copy_backyard list: 0 0 0 0 0 0 0 0 0 0
after copy_backyard list: 0 1 2 3 4 5 6 7 8 9
五 参考
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值