001 | /*-
========================================================== |
002 | *
文件名 :STL_con_ite_6.cpp |
007 | *
功能说明:STL 容器和迭代器连载6_顺序容器的操作3 |
008 | *
版权说明:版权所有 袁培荣 YuanPeirong |
009 | *
编译环境:Windows 7(x64) SP1 简体中文专业版 |
010 | *
编译器: Visual Studio 2010 SP1(中文旗舰版) |
011 | MinGW
20120426 GNU GCC 4.6.2 |
012 | Visual
C++ 6.0 SP6(中文企业版) |
013 | -
==========================================================*/ |
028 | int main( int argc, char *
argv[]) |
034 | for ( int i=0;
i!=101; i++) //C++程序员习惯于用i!=101,而不是i<101 |
036 | cout<< "在所有删除操作前v1.size()=" <<v1.size()<<endl; |
039 | //erase(p)
:删除迭代器p所指向的元素 |
043 | cout<< "删除前v1的第96个元素值是(方法1输出):" <<*(v1.begin()+95)<<endl; |
044 | cout<< "删除前v1的第96个元素值是(方法2输出):" <<v1[95]<<endl; |
046 | vector< int >::iterator
iter1=v1.erase(v1.begin()+95); |
048 | cout<< "删除后v1.size()=" <<v1.size()<<endl; |
049 | cout<< "删除后v1的第96个元素值是(方法1输出):" <<*iter1<<endl; |
050 | cout<< "删除后v1的第96个元素值是(方法2输出):" <<v1[95]<<endl; |
053 | //erase(b,e)
:删除迭代器b,e所指向的元素形成的左闭合区间 |
054 | //返回指向被删除的最后一个元素的下一位置的迭代器。 |
056 | cout<< "删除前v1的第81个元素值是:" <<*(v1.begin()+80)<<endl; |
057 | cout<< "删除前v1的第82个元素值是:" <<*(v1.begin()+81)<<endl; |
058 | cout<< "删除前v1的第83个元素值是:" <<*(v1.begin()+82)<<endl; |
060 | iter1=v1.erase(v1.begin()+80,
v1.begin()+83); |
062 | cout<< "删除后v1.size()=" <<v1.size()<<endl; |
063 | cout<< "删除后v1的第81个元素值是(方法1输出):" <<*iter1<<endl; |
064 | cout<< "删除后v1的第81个元素值是(方法2输出):" <<*(v1.begin()+80)<<endl; |
065 | cout<< "删除后v1的第82个元素值是:" <<*(v1.begin()+81)<<endl; |
066 | cout<< "删除后v1的第83个元素值是:" <<*(v1.begin()+82)<<endl; |
069 | //pop_back()
删除容器的最后一个元素,返回void类型 |
071 | cout<< "删除前v1的最后一个元素值是:" <<*(v1.end()-1)<<endl; |
072 | if (v1.size()!=0) //防止容器为空时,删除操作引发错误 |
075 | cout<< "删除后v1.size()=" <<v1.size()<<endl; |
076 | cout<< "删除后v1的最后一个元素值是:" <<*(v1.end()-1)<<endl; |
079 | //pop_front()
删除容器的第一个元素,返回void类型 |
080 | //值得注意的是,这种方法只能用于list和deque容器 |
082 | *l1.begin()=0; //为便于区分元素,将各修改成不相同 |
083 | //下面指出修改list容器的元素时的两种错误 |
084 | //l1[1]=1;
//list容器不支持l1[0]这样的下标访问(下面会讲) |
085 | //*(l1.begin()+2)=2;
//list容器的迭代器不能与数值相加(复习一下前面) |
086 | list< int >::iterator
iter2=l1.begin(); |
087 | iter2++; //迭代器的++操作是对所有容器都支持的 |
092 | cout<< "删除前l1.size()=" <<l1.size()<<endl; |
093 | cout<< "删除前l1的第一个元素值是:" <<*l1.begin()<<endl; |
094 | if (!l1.empty()) //防止容器为空时,删除操作引发错误 |
095 | l1.pop_front(); //empty()用来判断容器是否为空,下面会讲 |
097 | cout<< "删除后l1.size()=" <<l1.size()<<endl; |
098 | cout<< "删除后l1的第一个元素值是:" <<*l1.begin()<<endl; |
100 | //虽然第四种方法pop_front(t)只支持list和deque容器 |
101 | //但我们用第一种方法的一个特例就能和做到第二种方法同样的效果: |
103 | cout<< "用第一种方法的特例实现第四种方法:" <<endl; |
104 | cout<< "删除前v1.size()=" <<v1.size()<<endl; |
105 | cout<< "删除前v1的第一个元素值是:" <<*v1.begin()<<endl; |
108 | cout<< "删除后v1.size()=" <<v1.size()<<endl; |
109 | cout<< "删除后v1的第一个元素值是:" <<*v1.begin()<<endl; |
110 | //这样,我们可以为不支持第四种方法的容器扩展这一种方法 |
113 | //clear()
删除容器内的所有元素,返回void类型 |
115 | cout<< "清空前v1.size()=" <<v1.size()<<endl; |
116 | cout<< "清空前l1.size()=" <<l1.size()<<endl; |
121 | cout<< "清空后v1.size()=" <<v1.size()<<endl; |
122 | cout<< "清空后l1.size()=" <<l1.size()<<endl; |
130 | //============================ |
132 | //============================ |
133 | //
在所有删除操作前v1.size()=101 |
135 | //
删除前v1的第96个元素值是(方法1输出):95 |
136 | //
删除前v1的第96个元素值是(方法2输出):95 |
138 | //
删除后v1的第96个元素值是(方法1输出):96 |
139 | //
删除后v1的第96个元素值是(方法2输出):96 |
145 | //
删除后v1的第81个元素值是(方法1输出):83 |
146 | //
删除后v1的第81个元素值是(方法2输出):83 |
168 | //============================ |
转自:
http://my.oschina.net/u/186539/blog/59452
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理