vector删除元素之pop_back(),erase(),remove()

---- 向量容器vector的成员函数pop_back()可以删除最后一个元素.

---- 而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。

---- 还可以采用通用算法remove()来删除vector容器中的元素.

---- 不同的是:采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。

1、pop_back()

void pop_back();

Delete last element
Removes the last element in the vector, effectively reducing the container size by one.

This destroys the removed element.
#include 
#include 
using namespace std;
int main()
{
	vector vec;
	int sum(0);
	vec.push_back(10);
	vec.push_back(20);
	vec.push_back(30);
	while(!vec.empty())
	{
		sum += vec.back();
		vec.pop_back();
	}
	cout<<"vec.size()="<
0

60

2、erase()

C++98

iterator erase (iterator position);
iterator erase (iterator first, iterator last);
C++11

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

删除指定位置的一个元素或删除指定范围内的元素

Removes from the vector either a single element (position) or a range of elements ([first,last)). 包括first,不包括last。


This effectively reduces the container size by the number of elements removed, which are destroyed.

会减小容器的容量。迭代器用于erase删除元素后,其后会失效,即不能再用该迭代器操作向量。

#include 
#include 
using namespace std;
int main()
{
	vector vec;
	for(int i=0;i<10;i++)
	{
		vec.push_back(i);
	}
	vec.erase(vec.begin()+5);//erase the 6th element
	vec.erase(vec.begin(),vec.begin()+3);
	for(int i=0;i

//输出3 4 6 7 8 9

3、remove()  不建议使用

#include 
#include 
using namespace std;
int main()
{
	vector vec;
	vec.push_back(100);
	vec.push_back(300);
	vec.push_back(300);
	vec.push_back(300);
	vec.push_back(300);
	vec.push_back(500);
	cout<<&vec<::iterator itor;
	for(itor=vec.begin();itor!=vec.end();itor++)
	{
		if(*itor==300)
		{
			itor=vec.erase(itor);
		}
	}
	for(itor=vec.begin();itor!=vec.end();itor++)
	{
		cout<<*itor<<" ";
	}	
	system("pause");
	return 0;
}


你可能感兴趣的:(C++)