博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
copy算法
阅读量:7112 次
发布时间:2019-06-28

本文共 1821 字,大约阅读时间需要 6 分钟。

std::copy_backward,逆序复制元素

  <algorithm>

原型:

  template<class  BidirIt1, class BidirIt2>

  BidirIt2 copy_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last);

返回:

  指向最后复制的元素的迭代器

注意:

  BidirIt, BidirectionIterator,双向迭代器

  复制重叠

  d_last要在[first, last) 之外

  如果在范围之内,则行为未定义。

可能的实现:

  

template
BidirIt2 copy_backward(BidirIt1 first, BidirIt2 last, BidirIt2 d_last){ while(first != last) { *(--d_last) = *(--last); } return d_last;}

 使用场景,想从把vector的某段元素后移一位,可以调用std::copy_backward(pos, finish - 2, finish - 1) 

 

std::uninitialized_copy, 复制[first, last) 的元素到始于d_first的未初始化内存。

  <memory>

原型:

  template<class InputIt, class ForwardIt>

  ForwardIt uninitialized_copy(InputIt first, InputIt last, ForwardIt d_first);

和下面这段代码作用相同:

for(; first != last ; ++d_first, (void)++first)    ::new (static_cast
(std::addressof(*d_first))) typename std::iterator_traits
::value_type(*first);// ::new, new expression//typename std::iterator_traits
::value_type, //对*first做了一个类型转换,//typename的作用是明确value_type是类型,不是成员变量//new (ptr) T, placement new, 在指向d_first的地方创建first

可能的实现:

1 template
2 ForwardIt uninitialized_copy(InputIt first, InputIt last, ForwardIt d_first) 3 { 4 typedef typename std::iterator_traits
::value_type Value; 5 ForwardIt current = d_first; 6 try 7 { 8 for( ; first != last ; ++current , (void)++first) 9 {10 ::new (static_cast
(std::addressof(*current))) Value(*first);11 }12 return current;13 }14 catch(...) {15 for(; d_first != current; ++d_first)16 d_first->~Value();17 throw;18 } 19 }

 返回:

  指向复制的最后一个元素的下一个元素的迭代器

 

 

转载于:https://www.cnblogs.com/jimobuwu/p/8727697.html

你可能感兴趣的文章
cocos 水果机,老Tiger虎机流水灯,博彩大转盘效果
查看>>
tmux不自动加载配置文件.tmux.conf
查看>>
C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)【转】
查看>>
[Database] Redis 随笔
查看>>
3 ansible-playbook 条件语句-外部变量使用
查看>>
当一个线程进入一个对象的synchronized方法A之后,其他线程是否可进入此对象的synchronized方法B?...
查看>>
使用 nvm 管理不同版本的 node 与 npm
查看>>
ASP.NET Web API 之一 入门篇
查看>>
L0、L1及L2范数
查看>>
zynq基础-->linux下软件应用
查看>>
一个小白的测试环境docker化之路
查看>>
基于Docker搭建MySQL主从复制
查看>>
005 使用SpringMVC开发restful API三--处理创建请求
查看>>
手机Soc芯片简介
查看>>
Gradle Java Web应用程序并在Tomcat上运行
查看>>
jz2440移植QT5.6【学习笔记】【原创】
查看>>
WPF 关于圆角的制作
查看>>
前端性能优化之WebP
查看>>
android studio 各种问题 应该能帮助到你们
查看>>
福州首届.NET开源社区技术交流会圆满成功
查看>>