您的位置:首页 > 移动开发 > IOS开发

STL 容器和迭代器连载6_顺序容器的操作3

2012-09-17 15:48 323 查看
001
/*-
==========================================================
002
*
文件名  :STL_con_ite_6.cpp
003
*
开发人员:袁培荣
004
*
当前版本:1.0.0.2595
005
*
创建时间:2012-05-24
006
*
修改时间:2012-05-24
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
-
==========================================================*/
014
015
#include
<iostream>
016
#include
<vector>
017
#include
<list>
018
#include
<deque>
019
#include
<string>
020
021
using
std::cout;
022
using
std::endl;
023
using
std::vector;
024
using
std::list;
025
using
std::deque;
026
using
std::string;
027
028
int
main(
int
argc,
char
*
argv[])
029
{
030
//下面来介绍删除容器内元素的相关操作
031
 
032
//先定义一个容器,并添加101个元素。
033
vector<
int
>
v1;
034
for
(
int
i=0;
i!=101; i++)
//C++程序员习惯于用i!=101,而不是i<101
035
v1.push_back(i);
036
cout<<
"在所有删除操作前v1.size()="
<<v1.size()<<endl;
037
 
038
//第一种方法:
039
//erase(p)
:删除迭代器p所指向的元素
040
//返回指向被删除元素的下一位置的迭代器。
041
//注意:p必须真实地指向实际存在的元素。
042
cout<<
"第一种方法:"
<<endl;
043
cout<<
"删除前v1的第96个元素值是(方法1输出):"
<<*(v1.begin()+95)<<endl;
044
cout<<
"删除前v1的第96个元素值是(方法2输出):"
<<v1[95]<<endl;
045
//我们把第96个元素删除
046
vector<
int
>::iterator
iter1=v1.erase(v1.begin()+95);
047
//验证:
048
cout<<
"删除后v1.size()="
<<v1.size()<<endl;
049
cout<<
"删除后v1的第96个元素值是(方法1输出):"
<<*iter1<<endl;
050
cout<<
"删除后v1的第96个元素值是(方法2输出):"
<<v1[95]<<endl;
051
 
052
//第二种方法:
053
//erase(b,e)
:删除迭代器b,e所指向的元素形成的左闭合区间
054
//返回指向被删除的最后一个元素的下一位置的迭代器。
055
cout<<
"第二种方法:"
<<endl;
056
cout<<
"删除前v1的第81个元素值是:"
<<*(v1.begin()+80)<<endl;
057
cout<<
"删除前v1的第82个元素值是:"
<<*(v1.begin()+81)<<endl;
058
cout<<
"删除前v1的第83个元素值是:"
<<*(v1.begin()+82)<<endl;
059
//我们把第81,82,83三个元素删除
060
iter1=v1.erase(v1.begin()+80,
v1.begin()+83);
061
//验证:
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;
067
 
068
//第三种方法:
069
//pop_back()
删除容器的最后一个元素,返回void类型
070
cout<<
"第三种方法:"
<<endl;
071
cout<<
"删除前v1的最后一个元素值是:"
<<*(v1.end()-1)<<endl;
072
if
(v1.size()!=0)
//防止容器为空时,删除操作引发错误
073
v1.pop_back();
074
//验证:
075
cout<<
"删除后v1.size()="
<<v1.size()<<endl;
076
cout<<
"删除后v1的最后一个元素值是:"
<<*(v1.end()-1)<<endl;
077
 
078
//第四种方法:
079
//pop_front()
删除容器的第一个元素,返回void类型
080
//值得注意的是,这种方法只能用于list和deque容器
081
list<
int
>
l1(3,0);
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++; 
//迭代器的++操作是对所有容器都支持的
088
*(iter2)=1;
089
iter2++;
090
*(iter2)=2;
091
cout<<
"第四种方法:"
<<endl;
092
cout<<
"删除前l1.size()="
<<l1.size()<<endl;
093
cout<<
"删除前l1的第一个元素值是:"
<<*l1.begin()<<endl;
094
if
(!l1.empty()) 
//防止容器为空时,删除操作引发错误
095
l1.pop_front();
//empty()用来判断容器是否为空,下面会讲
096
//验证:
097
cout<<
"删除后l1.size()="
<<l1.size()<<endl;
098
cout<<
"删除后l1的第一个元素值是:"
<<*l1.begin()<<endl;
099
 
100
//虽然第四种方法pop_front(t)只支持list和deque容器
101
//但我们用第一种方法的一个特例就能和做到第二种方法同样的效果:
102
//例如:
103
cout<<
"用第一种方法的特例实现第四种方法:"
<<endl;
104
cout<<
"删除前v1.size()="
<<v1.size()<<endl;
105
cout<<
"删除前v1的第一个元素值是:"
<<*v1.begin()<<endl;
106
v1.erase(v1.begin());
107
//验证:
108
cout<<
"删除后v1.size()="
<<v1.size()<<endl;
109
cout<<
"删除后v1的第一个元素值是:"
<<*v1.begin()<<endl;
110
//这样,我们可以为不支持第四种方法的容器扩展这一种方法
111
 
112
//第五种方法:
113
//clear()
删除容器内的所有元素,返回void类型
114
cout<<
"第五种方法:"
<<endl;
115
cout<<
"清空前v1.size()="
<<v1.size()<<endl;
116
cout<<
"清空前l1.size()="
<<l1.size()<<endl;
117
//清空v1和l1
118
v1.clear();
119
l1.clear();
120
//验证:
121
cout<<
"清空后v1.size()="
<<v1.size()<<endl;
122
cout<<
"清空后l1.size()="
<<l1.size()<<endl;
123
 
124
 
125
 
126
return
0;
127
}
128
129
130
//============================
131
//运行结果:
132
//============================
133
//
在所有删除操作前v1.size()=101
134
//
第一种方法:
135
//
删除前v1的第96个元素值是(方法1输出):95
136
//
删除前v1的第96个元素值是(方法2输出):95
137
//
删除后v1.size()=100
138
//
删除后v1的第96个元素值是(方法1输出):96
139
//
删除后v1的第96个元素值是(方法2输出):96
140
//
第二种方法:
141
//
删除前v1的第81个元素值是:80
142
//
删除前v1的第82个元素值是:81
143
//
删除前v1的第83个元素值是:82
144
//
删除后v1.size()=97
145
//
删除后v1的第81个元素值是(方法1输出):83
146
//
删除后v1的第81个元素值是(方法2输出):83
147
//
删除后v1的第82个元素值是:84
148
//
删除后v1的第83个元素值是:85
149
//
第三种方法:
150
//
删除前v1的最后一个元素值是:100
151
//
删除后v1.size()=96
152
//
删除后v1的最后一个元素值是:99
153
//
第四种方法:
154
//
删除前l1.size()=3
155
//
删除前l1的第一个元素值是:0
156
//
删除后l1.size()=2
157
//
删除后l1的第一个元素值是:1
158
//
用第一种方法的特例实现第四种方法:
159
//
删除前v1.size()=96
160
//
删除前v1的第一个元素值是:0
161
//
删除后v1.size()=95
162
//
删除后v1的第一个元素值是:1
163
//
第五种方法:
164
//
清空前v1.size()=95
165
//
清空前l1.size()=2
166
//
清空后v1.size()=0
167
//
清空后l1.size()=0
168
//============================
转自:http://my.oschina.net/u/186539/blog/59452
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息