现在的位置: 首页 > 综合 > 正文

[C/C++标准库]_[std::vector的erase用法]

2013年01月18日 ⁄ 综合 ⁄ 共 880字 ⁄ 字号 评论关闭

std::vector

场景:

1.std::vector需要根据条件删除特定的元素。

2.std::vector的iterator在删除后这个iterator是失效的,所以不能直接++iter,这时候只能取erase的返回值下一个iterator作为有效的iter使用.

#include <stdio.h>
#include <assert.h>
#include <vector>

typedef struct closure closure;

struct closure
{
	int isAllow;
};

int main(int argc, char *argv[])
{
	std::vector<closure*> infos;
	closure c1;
	c1.isAllow = 1;

	closure c2;
	c2.isAllow = 0;

	closure c3;
	c3.isAllow = 1;

	closure c4;
	c4.isAllow = 0;

	closure c5;
	c5.isAllow = 0;

	infos.push_back(&c1);
	infos.push_back(&c2);
	infos.push_back(&c3);
	infos.push_back(&c4);
	infos.push_back(&c5);

	printf("begin delete\n");
	std::vector<closure*>::iterator iter;
	for(iter = infos.begin();iter != infos.end();)
	{
		closure* c = *iter;
		if(c->isAllow)
		{
			iter = infos.erase(iter);
		}else
		{
			++iter;
		}
	}

	printf("end delete %d\n",infos.size());
	for(iter = infos.begin();iter != infos.end();++iter)
	{
		closure* c = *iter;
		assert(!c->isAllow);
	}
	printf("end list left.\n");
	return 0;
}

输出:

begin delete
end delete 3
end list left.

抱歉!评论已关闭.