首页 > 编程语言 > 详细

C++11 std::copy

时间:2015-12-08 22:09:30      阅读:292      评论:0      收藏:0      [点我收藏+]

这个函数并不是简单的

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

原文:http://www.cnblogs.com/hustxujinkang/p/5030953.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!