您的位置:首页 > 其它

STL remove

2018-02-11 10:07 127 查看
本文内容来自C++Plus,本文只是本人的总结和翻译而已。本人只是C++的搬运工。原文传送门:http://www.cplusplus.com/reference/algorithm/remove/remove算法:在范围区间内删除值。值得注意的是这个remove算法是STL里面的,和API remove不是同一个东西。template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator result = first;
while (first!=last) {
if (!(*first == val)) {
*result = *first;
++result;
}
++first;
}
return result;
}拿着迭代器First里面的每个值和需要remove 的value进行比较,并且在算法结束的时候返回新的迭代器的末尾位置。
remove算法是不会改变数组容器大小的,也不会改变容器内包含的元素的属性。也不会改变没有被删除的元素的顺序,当遍历完成后会返回新的迭代器末尾位置的元素。
注意:
1.remove算法是不会改变容器的大小的,所以就算删除掉了元素,但是空间范围内最后位置上的元素位置依然保存,只是变成了垃圾值。。。
2.最需要注意的是remove算法的返回值,他所返回的是新的迭代器的最后一个元素的位置上的指针。
测试代码如下:#include <iostream> // std::cout
#include <algorithm> // std::remove

int main () {
int myints[] = {10,20,30,30,20,10,10,20}; // 10 20 30 30 20 10 10 20

// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^

pend = std::remove (pbegin, pend, 20); // 10 30 30 10 10 ? ? ?
// ^ ^
std::cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
std::cout << ' ' << *p;
std::cout << '\n';

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: