std::remove
#include <algorithm>
template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );
在容器的[first , last) 区间里删除和value 值相等的元素。但是删除机制是将用value后面的值去覆盖value,未被删除的元素整体前移,相对位置不变,此时容器大小也不变。返回的迭代器到容器末尾的值都不确定,这个算法一般和erase一起使用。
(翻译cpp文档)。
可能的实现:
template< class ForwardIt, class T > ForwardIt remove(ForwardIt first, ForwardIt last, const T& value) { first = std::find(first, last, value); if (first != last) for(ForwardIt i = first; ++i != last; ) if (!(*i == value)) *first++ = std::move(*i); return first; }
std::move(value) 告知编译器value 为临时变量,赋值时调用的是 T(T&&)这样的构造函数,&&不表示引用的引用,表示传入的是临时变量。拷贝时不再重新分配内存,遍历数据,以及析构传入的临时变量,而是直接将临时变量的信息直接转移给新的主人。起到优化的作用。
关于std::move 具体参见:
http://blog.csdn.net/pongba/article/details/1684519