【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记

版权声明:本文为博主原创文章,转载复制标题加链接即可√ https://blog.csdn.net/qazcxh/article/details/44996167

例题为:假设有如下ia的定义,ia复制到vector和list中,把list容器中奇数值元素删除掉,把vector容器偶数值元素删除掉。

数组复制采用push_back操作。删除操作采用了erase函数,由于该函数返回值为指向被删除元素后面的元素,则使用了返回值赋值回给迭代器的方法,对迭代器进行前移,保证循环的继续进行。相当于迭代器回到了erase操作之前的状态,只是迭代器自增后指向的值为删除元素后的元素。


/*
 * delete.cpp
 *
 *  Created on: 2015年4月10日
 *      Author: CXH
 */

#include <iostream>
#include <vector> //vector容器类型头文件
#include <list>	//list容器类型头文件
using namespace std;
int main()
{
	int ia[]={0,1,1,2,3,5,8,13,21,55,89};
	int iasize=sizeof(ia)/sizeof(int);
	cout<<iasize<<'\n';
	vector<int> ivec;
	list<int> ilist;
	for (int i=0; i<iasize; i++) {
		ivec.push_back(ia[i]);
	}
	for (int i=0; i<iasize; i++) {
			ilist.push_back(ia[i]);
	}

	//剔除奇数后的内容
	for (list<int>::iterator listit=ilist.begin(); listit!=ilist.end(); listit++) {
		if (*listit%2!=0) {//判断是奇数
			listit=ilist.erase(listit);//erase函数返回值为指向被删除元素后面的元素
			listit--;
		}
	}
	for (list<int>::iterator listit=ilist.begin(); listit!=ilist.end(); listit++) {
		cout<<*listit<<'\n';
	}

	//剔除偶数后的内容
	for (vector<int>::iterator vecit=ivec.begin(); vecit!=ivec.end(); vecit++) {
		if(*vecit%2==0){//判断是偶数
			vecit=ivec.erase(vecit);//erase函数返回值为指向被删除元素后面的元素
			vecit--;
		}
	}
	for(vector<int>::iterator vecit=ivec.begin();vecit!=ivec.end();vecit++){
		cout<<*vecit<<'\n';
	}

	return 0;
}

运行结果:



猜你喜欢

转载自blog.csdn.net/qazcxh/article/details/44996167
今日推荐