copy算法



copy------强化效率无所不用其极

copy(first,last,result)算法可将输入区间[first,last)内的元素拷贝到输出区间[result,result+(last-first))内。也就是说,它会运行赋值操作*result
=*first,*(result+1) =*(first+1),

…一次类推。

返回一个迭代器:result+(last-first)。

注意:当result位于[first,last)之内时,也就是说,假设输出区间的起头与输入区间重叠,我们便不能使用copy。但假设输出区间的尾端与输入区间重叠。就能够使用copy。copy_backward的限制恰恰相反。假设两个区间全然不重叠,当然毫无疑问两个算法都能够用。

copy更改的是[result,result+(last-first))中的迭代器所指对象。而非更改迭代器本身。它会为输出区间内的元素赋予新值,而不是产生新元素。

它不能改变输出区间的迭代器个数。换句话说。copy不能直接用来将元素插入空容器中。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmF5ZXJ5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

Template <classBidirectionalIterator1,class BidirectionalIterator2>

BidirectionalIterator2copy_backward(BidirectionalIterator1 first,BidirectionalIterator1 last,

BidirectionalIterator2 result)

这个算法的考虑以及实现上的技巧与copy()十分类似,将[first,last)区间内每个元素,以逆行的方向拷贝到以result-1为起点,方向亦为逆行的区间上。

换句话说,copy_backward算法会运行赋值操作*(result-1)
= *(last-1),*(result-2)=*(last-2),…依次类推。

返回一个迭代器:

result-(last-first)。Copy_backward所接受的迭代器必须是BidirectionalIterators,才可以“倒行逆施”。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-09-26 20:10:06

copy算法的相关文章

【error 2625】实现STL的copy算法时出现的问题

在实现set_union算法时调用了自己写的copy算法,出现了以下问题. Error 1 error C2665: 'xyz_stl::__copy' : none of the 2 overloads could convert all the argument types 即“__copy的2个重载不能转换所有的参数类型”. 注:__copy是照着STL源码剖析进行命名的(实际上我倒很不喜欢SGI的那么长的命名),是针对输入迭代器(InputIterator)的迭代器类型(iterator

STL算法 — copy

为了效率,copy算法可谓无所不用其极,通过分析copy算法能够体会STL的精妙. 首先是三个对外接口: template <class InputIterator, class OutputIterator> // 泛化版本 inline OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result) { return __copy_dispatch<InputIterator,Ou

C++11新特性应用--介绍几个新增的便利算法(更改容器中元素顺序的算法)

昨天罗列了C++11中新增的几个算法,包括 find_if_not.all_of.any_of.none_of四个算法,这四个算法的共同点就是Non-modifying sequence operations. 所以,今天就来八一八C++11中新增的算法,而这些算法的特点是:Modifying sequence operations. copy算法我们很熟悉,这里介绍一下C++11新增的copy_n. copy_n 原型: template <class InputIterator, class

关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章

http://www.myexception.cn/image/1630385.html 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章 昨天开始写一个录制屏幕和声音存储为视频文件的程序,差不多完成了. 屏幕录制使用方法:抓屏(方法很多,BitBlt.DirectX.MirrorDriver等),缩放,X264压缩(开源的,自己封装) 声音录制使用方法:声卡采集PCM数据,AAC压缩(开源的,自己封装) 最后打包复用为MP4文件,可以使用ffmpeg或者mp4v2等. 经过断断续续一天的

stl变易算法(一)

C++ STL的变易算法是一组能够修改容器元素数据的模板函数,可进行序列容器的复制.交换.替换.填充.移除.旋转等.这些算法对迭代器有较高的要求,具体的迭代器类型随各个算法而定,或向前迭代器.或双向迭代器.又或者是随机迭代器,以提供算法所需要的迭代器操作.应用变易算法时,先要检查容器的迭代器是否符合要求,防止产生编译错误. 元素复制copy C++STL提供一个用于容器间元素拷贝的copy算法,将迭代区间[first,last)的元素复制到由复制目标迭代器result给定的区间[result,r

循环赛日常表算法(N可为奇数和偶数)

一. 实验题目 设有n位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空.试按此要求为比赛安排日程. 二.实验目的 1.深刻理解并掌握“分治算法”的设计思想: 2.提高应用“分治算法”设计技能: 3.理解这样一个观点:用递归方法编写的问题解决程序具有结构清晰,可读性强等优点,且递归算法的设计比非递归算法的设计往往要容易一些,所以当问题本身是递归定义的,或者问题所涉及到的数据结构是递归定义的,或者是问题的解决方法是递归形式的时候,

CH10 泛型算法

概述 大多数算法都定义在algorithm头文件中. Note:算法永远不会执行容器操作 泛型算法本身不会执行容器的操作,而是通过迭代器来访问.修改等操作 10.1 题目要求读取数据存入vector,并实现用户可以查找的值出现在vector中的次数,所以可以考虑用户查找文件中某个数出现的次数,所以可以考虑文件操作 1 int main(int argc, char* argv[]) 2 { 3 ifstream infile(argv[1]); 4 if (!infile) 5 cerr <<

c++泛型算法(1)

顺序容器只定义了很少的操作,为了能做其他更多有用的操作:查找特定元素,替换或删除某一特定值,重排元素顺序等.泛型算法是一些经典算法的公共接口 1.概述 大多数算法都定义在头文件algorithm中,标准库还在头文件numeric中定义了一组数值泛型算法. 泛型算法不会执行容器的操作,只会运行于迭代器之上,执行迭代器的操作 .这样就导致算法不能改变容器的大小,也就不能直接添加或删除元素了.因此标准库定义了一种叫插入器的特殊迭代器来完成向容器添加元素的效果. 2.初识泛型算法 标准库提供了超过100

STL六大组件之——算法小小小小的解析

参考自侯捷的<stl源码剖析> stl算法主要分为非可变序列算法(指不直接修改其所操作的容器内容的算法),可变序列算法(指可以修改它们所操作的容器内容的算法),排序算法(包括对序列进行排序和合并的算法.搜索算法以及有序序列上的集合操作),数值算法(对容器内容进行数值计算). 1.非可变序列算法 stl中的非可变序列算法有:for_each(), find(), find_if(), adjacent_find(), find_first_of(), count(), count_if(), m