STL algorithm算法mov,move_backward(38)
move原型:
std::move
- template <class InputIterator, class OutputIterator>
- OutputIterator move (InputIterator first, InputIterator last, OutputIterator result);
该函数是将指定范围内的元素移动到从result開始的位置。
move之后。[first,last)范围内的元素去留的详细实现由编译器决定。
result不能是在[first,last)范围内。
返回值为result中最后一个被覆盖元素的下一个位置元素的迭代器
其行为类似于:
|
|
一个简单的样例:
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- void mmove(){
- vector<int> vi{3,5,1,1};
- vector<int> v2{3,5,5,1};
- vector<int> result{1,2,3,4,5,6,7};
- cout<<"vi=";
- for(int i:vi)
- cout<<i<<" ";
- cout<<endl;
- cout<<"result=";
- for(int i:result)
- cout<<i<<" ";
- cout<<endl;
- auto it=move(vi.begin(),vi.end(),result.begin());
- cout<<"after auto it=move(vi.begin(),vi.end(),result.begin())"<<endl;
- cout<<"vi=";
- for(int i:vi)
- cout<<i<<" ";
- cout<<endl;
- cout<<"result=";
- for(int i:result)
- cout<<i<<" ";
- cout<<endl;
- cout<<"it="<<*it<<endl;
- cout<<"v2=";
- for(int i:v2)
- cout<<i<<" ";
- cout<<endl;
- auto it2=move(v2.begin()+1,v2.end(),v2.begin());
- cout<<"after auto it2=move(v2.begin()+1,v2.end(),v2.begin());"<<endl;
- cout<<"v2=";
- for(int i:v2)
- cout<<i<<" ";
- cout<<endl;
- if(it2==v2.end())
- cout<<"it2==v2.end()"<<endl;
- else
- cout<<"it2="<<*it2<<endl;
- }
执行截图:
能够看到。假设result在[first,last)范围内,将改写原来的元素。
特别是有可能你move的元素是你已经改动了的元素,导致了你不希望的行为。
move_backward原型:
std::move_backward
- template <class BidirectionalIterator1, class BidirectionalIterator2>
- BidirectionalIterator2 move_backward (BidirectionalIterator1 first,
- BidirectionalIterator1 last,
- BidirectionalIterator2 result);
该函数是将范围[first,last)内的元素从后往前移动到result的位置。result覆盖的顺序也是逆序的。
该函数返回目的范围result的从顺序来看第一个被覆盖的元素(是指顺着看第一个被覆盖的元素而不是首先被覆盖的元素)(看以下详细的样例)。
其行为类似于:
- template<class BidirectionalIterator1, class BidirectionalIterator2>
- BidirectionalIterator2 move_backward ( BidirectionalIterator1 first,
- BidirectionalIterator1 last,
- BidirectionalIterator2 result )
- {
- while (last!=first) *(--result) = std::move(*(--last));
- return result;
- }
一个简单的样例:
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- void mmovebackward(){
- vector<int> vi{99,5,1,1};
- vector<int> result{1,2,88,4,5,6,7};
- cout<<"vi=";
- for(int i:vi)
- cout<<i<<" ";
- cout<<endl;
- cout<<"result=";
- for(int i:result)
- cout<<i<<" ";
- cout<<endl;
- auto it=move_backward(vi.begin(),vi.end(),result.end());
- cout<<"after auto it=move_backward(vi.begin(),vi.end(),result.end())"<<endl;
- cout<<"vi=";
- for(int i:vi)
- cout<<i<<" ";
- cout<<endl;
- cout<<"result=";
- for(int i:result)
- cout<<i<<" ";
- cout<<endl;
- cout<<"it="<<*it<<endl;
- }
执行截图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE4NDQzNTIxNTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
注意的是。返回的是指向result中的99元素的迭代器,而不是first,last范围内的first!
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,能够在以下留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我改动,更好的分享给大家。谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-9-19
于GDUT
———
STL algorithm算法mov,move_backward(38)的更多相关文章
- STL algorithm算法merge(34)
merge原型: std::merge default (1) template <class InputIterator1, class InputIterator2, class Outpu ...
- STL algorithm算法mismatch(37)
mismatch原型: std::mismatch equality (1) template <class InputIterator1, class InputIterator2> p ...
- STL algorithm算法is_permutation(27)
is_permutation原型: std::is_permutation equality (1) template <class ForwardIterator1, class Forwar ...
- STL algorithm算法lower_bound和upper_bound(31)
lower_bound原型: function template <algorithm> std::lower_bound default (1) template <class F ...
- STL algorithm算法minmax,minmax_element(36)
minmax原型: std::minmax C++11 C++14 default (1) template <class T> pair <const T&,const T ...
- STL algorithm算法min,min_element(35)
min样板: std::min C++98 C++11 C++14 default (1) template <class T> const T& min (const T& ...
- STL algorithm算法max,max_elements(33)
max原型: std::max C++98 C++11 C++14 default (1) template <class T> const T& max (const T& ...
- STL algorithm算法make_heap和sort_heap(32)
make_heap原型: std::make_heap default (1) template <class RandomAccessIterator> void make_heap ( ...
- STL algorithm算法lexicographical_compare(30)
lexicographical_compare原型: std::lexicographical_compare default (1) template <class InputIterator ...
随机推荐
- C#运算符小例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- android 图片特效处理之 光晕效果
这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...
- html ---- a 标签 在新窗口打开的问题
- 69.类型后缀,重载操作符""
#include <iostream> using namespace std; class myclass { public: int num; int num2; public: my ...
- class的写法
java中class的写法:1.public class xxx{}2.非public类:public class A{}public class B{}必须保证一个其中一个类名是public并与ja ...
- linux的dhcp4.1.1服务部署
Centos6.5的dhcp4.1.1服务部署 实施步骤: 1:设置DHCP服务器静态IP和主机名 [root@sw ~]# vim /etc/sysconfig/network-scripts/i ...
- VC多线程临界区
在使用多线程时,一般非常少有多个线程全然独立的工作.往往是多个线程同一时候操作一个全局变量来获取程序的执行结果.多个线程同一时候訪问同一个全局变量,假设都是读取操作,则不会出现故障. 假设是写操作,则 ...
- (二十二)unity4.6学习Ugui中文文档-------交互-Eventsystem & Binding
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unityma ...
- javaEE之------Spring-----》 AspectJ注解
前面介绍了下Spring中的切面技术.如今说下採用注解的方式进行切面 首先肯定和之前的一样.须要一个自己主动代理的注解类 AnnotationAwareAspectJAutoProxyCreator ...
- Python-根据成绩分析是否继续深造
案例:该数据集的是一个关于每个学生成绩的数据集,接下来我们对该数据集进行分析,判断学生是否适合继续深造 数据集特征展示 GRE 成绩 (290 to 340) TOEFL 成绩(92 to 120) ...