STL algorithm算法mov,move_backward(38)
来源:互联网 发布:数据连接池的工作原理 编辑:程序博客网 时间:2024/05/17 05:54
move原型:
std::move
template <class InputIterator, class OutputIterator> OutputIterator move (InputIterator first, InputIterator last, OutputIterator result);
move之后,[first,last)范围内的元素去留的具体实现由编译器决定。
result不能是在[first,last)范围内。
返回值为result中最后一个被覆盖元素的下一个位置元素的迭代器
其行为类似于:
3456789
template<class InputIterator, class OutputIterator> OutputIterator move (InputIterator first, InputIterator last, OutputIterator result){ while (first!=last) { *result = std::move(*first); ++result; ++first; } return 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);
该函数返回目的范围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;}运行截图:
注意的是,返回的是指向result中的99元素的迭代器,而不是first,last范围内的first!
——————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-9-19
于GDUT
———
0 0
- STL algorithm算法mov,move_backward(38)
- STL algorithm算法集合
- 【STL】algorithm算法介绍
- STL algorithm算法binary_search(5)
- STL algorithm算法copy(6)
- STL algorithm算法copy_backward(7)
- STL algorithm算法copy_if(8)
- STL algorithm算法copy_n(9)
- STL algorithm算法count(10)
- STL algorithm算法count_if(11)
- STL algorithm算法equal(12)
- STL algorithm算法equal_range(13)
- STL algorithm算法fill(14)
- STL algorithm算法find_end(17)
- STL algorithm算法find_first_of(18)
- STL algorithm算法find_if(19)
- STL algorithm算法find_if_not(20)
- STL algorithm算法includes(23)
- 【视频】零基础学Android开发:蓝牙聊天室APP(一)
- linux 通用Makefile模板
- POJ 2538 WERTYU(水题)
- AfxMessageBox和MessageBox区别
- 将dijkstra和Floyd比较好的
- STL algorithm算法mov,move_backward(38)
- 校验文件不起作用
- default argument given of parameter 的问题
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 List Set
- android bitmap内存处理
- switch分支语句注意事项及注册界面的使用思路
- NYOJ 814 又见拦截导弹
- Linux负载均衡软件LVS之一(概念篇)
- java的web.xml中<url-pattern>配置