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;
}
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;
}
相关文章推荐
- STL中remove和remove_if用法
- STL中的erase函数跟remove函数有什么区别?
- 【STL】 Remove an iterator
- STL remove和erase
- STL_Algorithm3: remove, remove_if, remove_copy, remove_copy_if
- STL: remove
- STL Vector remove()和erase()的使用
- stl remove的例子
- STL Vector remove()和erase()的使用
- STL Vector remove()和erase()的使用
- C++进修之STL(一)—— erase和remove特异行动
- stl list.remove_if使用
- STL remove和erase
- STL中的remove问题
- Leetcode 27 Remove Element STL
- STL的remove函数和list的remove成员函数
- STL remove和erase
- stl之std::remove_copy
- STL中的erase函数跟remove函数有什…
- STL之remove算法详解