2019独角兽企业重金招聘Python工程师标准>>>
/*- ==========================================================
* 文件名 :STL_con_ite_6.cpp
* 开发人员:袁培荣
* 当前版本:1.0.0.2595
* 创建时间:2012-05-24
* 修改时间:2012-05-24
* 功能说明:STL 容器和迭代器连载6_顺序容器的操作3
* 版权说明:版权所有 袁培荣 YuanPeirong
* 编译环境:Windows 7(x64) SP1 简体中文专业版
* 编译器: Visual Studio 2010 SP1(中文旗舰版)MinGW 20120426 GNU GCC 4.6.2Visual C++ 6.0 SP6(中文企业版)
- ==========================================================*/#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <string>using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;
using std::string;int main(int argc, char* argv[])
{//下面来介绍删除容器内元素的相关操作//先定义一个容器,并添加101个元素。vector<int> v1;for(int i=0; i!=101; i++) //C++程序员习惯于用i!=101,而不是i<101v1.push_back(i);cout<<"在所有删除操作前v1.size()="<<v1.size()<<endl;//第一种方法://erase(p) :删除迭代器p所指向的元素//返回指向被删除元素的下一位置的迭代器。//注意:p必须真实地指向实际存在的元素。cout<<"第一种方法:"<<endl;cout<<"删除前v1的第96个元素值是(方法1输出):"<<*(v1.begin()+95)<<endl;cout<<"删除前v1的第96个元素值是(方法2输出):"<<v1[95]<<endl;//我们把第96个元素删除vector<int>::iterator iter1=v1.erase(v1.begin()+95);//验证:cout<<"删除后v1.size()="<<v1.size()<<endl;cout<<"删除后v1的第96个元素值是(方法1输出):"<<*iter1<<endl;cout<<"删除后v1的第96个元素值是(方法2输出):"<<v1[95]<<endl;//第二种方法://erase(b,e) :删除迭代器b,e所指向的元素形成的左闭合区间//返回指向被删除的最后一个元素的下一位置的迭代器。cout<<"第二种方法:"<<endl;cout<<"删除前v1的第81个元素值是:"<<*(v1.begin()+80)<<endl;cout<<"删除前v1的第82个元素值是:"<<*(v1.begin()+81)<<endl;cout<<"删除前v1的第83个元素值是:"<<*(v1.begin()+82)<<endl;//我们把第81,82,83三个元素删除iter1=v1.erase(v1.begin()+80, v1.begin()+83);//验证:cout<<"删除后v1.size()="<<v1.size()<<endl;cout<<"删除后v1的第81个元素值是(方法1输出):"<<*iter1<<endl;cout<<"删除后v1的第81个元素值是(方法2输出):"<<*(v1.begin()+80)<<endl;cout<<"删除后v1的第82个元素值是:"<<*(v1.begin()+81)<<endl;cout<<"删除后v1的第83个元素值是:"<<*(v1.begin()+82)<<endl;//第三种方法://pop_back() 删除容器的最后一个元素,返回void类型cout<<"第三种方法:"<<endl;cout<<"删除前v1的最后一个元素值是:"<<*(v1.end()-1)<<endl;if(v1.size()!=0) //防止容器为空时,删除操作引发错误v1.pop_back();//验证:cout<<"删除后v1.size()="<<v1.size()<<endl;cout<<"删除后v1的最后一个元素值是:"<<*(v1.end()-1)<<endl;//第四种方法://pop_front() 删除容器的第一个元素,返回void类型//值得注意的是,这种方法只能用于list和deque容器list<int> l1(3,0);*l1.begin()=0; //为便于区分元素,将各修改成不相同//下面指出修改list容器的元素时的两种错误//l1[1]=1; //list容器不支持l1[0]这样的下标访问(下面会讲)//*(l1.begin()+2)=2; //list容器的迭代器不能与数值相加(复习一下前面)list<int>::iterator iter2=l1.begin();iter2++; //迭代器的++操作是对所有容器都支持的*(iter2)=1;iter2++;*(iter2)=2;cout<<"第四种方法:"<<endl;cout<<"删除前l1.size()="<<l1.size()<<endl;cout<<"删除前l1的第一个元素值是:"<<*l1.begin()<<endl;if(!l1.empty()) //防止容器为空时,删除操作引发错误l1.pop_front(); //empty()用来判断容器是否为空,下面会讲//验证:cout<<"删除后l1.size()="<<l1.size()<<endl;cout<<"删除后l1的第一个元素值是:"<<*l1.begin()<<endl;//虽然第四种方法pop_front(t)只支持list和deque容器//但我们用第一种方法的一个特例就能和做到第二种方法同样的效果://例如:cout<<"用第一种方法的特例实现第四种方法:"<<endl;cout<<"删除前v1.size()="<<v1.size()<<endl;cout<<"删除前v1的第一个元素值是:"<<*v1.begin()<<endl;v1.erase(v1.begin());//验证:cout<<"删除后v1.size()="<<v1.size()<<endl;cout<<"删除后v1的第一个元素值是:"<<*v1.begin()<<endl;//这样,我们可以为不支持第四种方法的容器扩展这一种方法//第五种方法://clear() 删除容器内的所有元素,返回void类型cout<<"第五种方法:"<<endl;cout<<"清空前v1.size()="<<v1.size()<<endl;cout<<"清空前l1.size()="<<l1.size()<<endl;//清空v1和l1v1.clear();l1.clear();//验证:cout<<"清空后v1.size()="<<v1.size()<<endl;cout<<"清空后l1.size()="<<l1.size()<<endl;return 0;
}//============================
//运行结果:
//============================
// 在所有删除操作前v1.size()=101
// 第一种方法:
// 删除前v1的第96个元素值是(方法1输出):95
// 删除前v1的第96个元素值是(方法2输出):95
// 删除后v1.size()=100
// 删除后v1的第96个元素值是(方法1输出):96
// 删除后v1的第96个元素值是(方法2输出):96
// 第二种方法:
// 删除前v1的第81个元素值是:80
// 删除前v1的第82个元素值是:81
// 删除前v1的第83个元素值是:82
// 删除后v1.size()=97
// 删除后v1的第81个元素值是(方法1输出):83
// 删除后v1的第81个元素值是(方法2输出):83
// 删除后v1的第82个元素值是:84
// 删除后v1的第83个元素值是:85
// 第三种方法:
// 删除前v1的最后一个元素值是:100
// 删除后v1.size()=96
// 删除后v1的最后一个元素值是:99
// 第四种方法:
// 删除前l1.size()=3
// 删除前l1的第一个元素值是:0
// 删除后l1.size()=2
// 删除后l1的第一个元素值是:1
// 用第一种方法的特例实现第四种方法:
// 删除前v1.size()=96
// 删除前v1的第一个元素值是:0
// 删除后v1.size()=95
// 删除后v1的第一个元素值是:1
// 第五种方法:
// 清空前v1.size()=95
// 清空前l1.size()=2
// 清空后v1.size()=0
// 清空后l1.size()=0
//============================