C++11 std::copy
这个函数并不是简单的
while(first != last)
{
*result = *first;
result++;
first++;
}
事实上这种写法是最具普适性的,值要求inputIterator是输入迭代器,outputIterator是输出迭代器
可以想像我们熟悉的链表,vector之类的迭代器都是满足要求的。但这种最具普适性的写法性能却不咋地。
习惯C语言的应该都很喜欢memcpy这个函数,确实高效。在C++里,不是所有的对象拷贝都能简单的memcpy的,
c++11给出了一个函数std::is_trivial_copyable用于判断某个类型是否能在拷贝的时候使用memcpy
而copy就专门为这种类型的的对象做了特化
还有就是在random_access_iterator的情形下,甚至可以直接拷贝整个容器
C++11的语境下,又多了一个move_iterator,它是在一般iterator的包装一层得到的,主要用于逐个的移动一个容器
也就是,一点一点的将容器中的元素移走。copy同样适用于这种语义,只要你给出的inputIterator是move_iterator就行了。
这对于诸于std::vector<std::string>之类的容器很是有用
C++11 std::copy的更多相关文章
- std::copy性能分析与memmove机器级实现
		
复制数据的快速方法std::copy C++复制数据各种方法大家都会,很多时候我们都会用到std::copy这个STL函数,这个效率确实很不错,比我们一个一个元素复制或者用迭代器复制都来的要快很多. ...
 - std::copy的使用
		
看到有人在用std::copy这个东西,很简洁和爽啊,,所以找些帖子学习学习 http://blog.sina.com.cn/s/blog_8655aeca0100t6qe.html https:// ...
 - 闲:测试memcpy和std::copy vector之间拷贝
		
预测:底层C函数肯定比stl算法快 结果:少量数据底层快,大数据以上则stl对vector的处理可能更好 C/C++: #include <iostream> #include <v ...
 - std::copy 和 std::back_inserter
		
#define print_vector(v1) \ for(auto iter = v1.begin();iter != v1.end();iter++) \ cout<<*iter&l ...
 - std::copy ( myvector.begin(), myvector.end(), out_it )
		
在实际生产环境中,不能进行调试,所以程序通常需要编译一个DEBUG版本来辅助我们找出问题所在,编译这样的DEBUG版本最常用的手段就是在关键处输出我们关心一些变量的值到屏幕. 如果输出的简单的变量值, ...
 - std::copy使用方法
		
推荐2个c++函数库,类定义的资料库: http://en.cppreference.com/w/cpp/algorithm/copy http://www.cplusplus.com/referen ...
 - c++11之copy 和 copy_if 的用法
		
0.时刻提醒自己 Note: vector的释放 1.功能 复制 [first, last) 所定义的范围中的元素到始于 d_first 的另一范围. 区别: copy_if 带条件拷贝,而非全拷贝 ...
 - C++11 std::move和std::forward
		
下文先从C++11引入的几个规则,如引用折叠.右值引用的特殊类型推断规则.static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std: ...
 - C++11 std::ref使用场景
		
C++本身有引用(&),为什么C++11又引入了std::ref(或者std::cref)? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用.如下例子: # ...
 
随机推荐
- 【bzoj1018】堵塞的交通
			
[bzoj1018]堵塞的交通 题意 一个\(2*n\)的格子,相邻格子之间有一条道路.初始时道路是不通的. \(C\)个操作,每个操作为三种中的一种:(1)某条道路连起来:(2)某条道路断开:(3) ...
 - Java位操作全面总结
			
转载: Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到 ...
 - 根据不同的屏幕宽度引入不同的css文件
			
<link rel="stylesheet" href="css/jl_public.css?v=11"/> <link rel=" ...
 - 5.3.2 Eclipse集成开发环境的使用技巧
			
Eclipse具有强大的编辑.调试.编译和打包功能,本节仅讲解Eclipse中最常用的功能. 1.将程序代码和注释字体变大 (1)启动Eclipse,选择“Windows”->“Preferen ...
 - [sso] 单点登录认证流程
			
一.流程说明 第一步:访问cas过滤链接ssoLogin,拼凑定向到 CAS_SERVER 获取ticket的URL 第二步:CAS_SERVER校验用户信息,生成Ticket 第三步:重新定向到访问 ...
 - hdu   1829   A Bug's Life(分组并查集(偏移量))
			
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
 - JQ添加移除css样式
			
1. addClass() - 添加CSS类 $("#target").addClass("newClass"); //#target 指的是需要添加样式的元素 ...
 - centOS wget的安装和使用
			
CentOS wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. 所谓的自动下载是指,CentOS wget可以在用户退出系统的之后在后台执行 ...
 - python中关于正则表达式
			
>>> import re>>> s='nihaoma'>>> re.findall(s,'nihao') []>>> re.f ...
 - 使用TypeScript开发程序
			
简介 TypeScript一直发展不错,我们公司在开发新功能时,考虑到程序的可维护性,使用了TypeScript编写浏览器上的程序,我们是从零开始使用TypeScript,甚至我连javascript ...