这个函数并不是简单的
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>之类的容器很是有用