STL & remove 真正的删除元素

remove

① 查找的得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素
② remove返回值 = “指向最后一个 ‘有用’ 元素的iterator”
③ remove并没有改变原容器的size,以及end(),并没有真正的删除元素

举例说明:
在这里插入图片描述

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
	//Lambda表达式:配合for_each,用于打印数组中的所有元素
	auto LmdPrint = [](int x)->void { cout << x << "  "; };

	vector<int> Numbers = { 1, 2, 1, 2, 2, 1, 3 };

	cout << "调用remove前:";
	for_each(Numbers.begin(), Numbers.end(), LmdPrint);
	
	//删除值为 2 的元素
	vector<int>::iterator ret = remove(Numbers.begin(), Numbers.end(), 2);

	cout << "\n调用remove后:";
	for_each(Numbers.begin(), Numbers.end(), LmdPrint);

	cout << "\n迭代器索引" << ret - Numbers.begin() << " = " << *ret << endl;

	system("pause");
}

erase函数介绍:

// 删除从first到last之间的所有元素
iterator erase(iterator first, iterator last);

条款32:remove+erase才能”真正的“删除vector中值为val的所有元素

    vec.erase(remove(vec.begin(), vec.end(), 待删除元素val , vec.end());

猜你喜欢

转载自blog.csdn.net/weixin_36750623/article/details/92078198
今日推荐