STL 容器和迭代器连载7_容器大小的操作

001 /*- ==========================================================
002 *     文件名  :STL_con_ite_7.cpp
003 *     开发人员:袁培荣
004 *     当前版本:1.0.0.2595
005 *     创建时间:2012-05-26
006 *     修改时间:2012-05-26
007 *     功能说明:STL 容器和迭代器连载7_容器大小的操作
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     //本文的内容适用所有容器,而不仅仅是顺序容器。
033      
034     //操作1:
035     //size()成员函数返回当前容器中元素的个数
036     //返回类型为 容器名<T>::size_type
037     cout<<"操作1:"<<endl;
038     vector<int> v1;
039     vector<string> v2(10);
040     vector<int>::size_type sv1=v1.size();
041     vector<string>::size_type sv2=v2.size();
042     cout<<"v1.size()="<<sv1<<endl;
043     cout<<"v2.size()="<<sv2<<endl;
044     //注意:不能用 vector<int>::size_type类型来接收 v2.size()
045     //因为一个是vector<int>类,另一个是vector<string>类,没有任何关系。
046     //如果容器元素有增减,我们就要重新获取其size。
047     v1.push_back(10); //在最尾加入一个10
048     v2.pop_back();    //把最尾元素删除
049     cout<<"增减容器元素后:"<<endl;
050     sv1=v1.size(); //重新获取容器的大小
051     sv2=v2.size(); //重新获取容器的大小
052     cout<<"v1.size()="<<sv1<<endl;
053     cout<<"v2.size()="<<sv2<<endl;
054      
055     //操作2:
056     //max_size() 成员函数返回当前容器所能容纳元素数量的最大值
057     //(注:包括可重新分配内存) 返回类型为 容器名<T>::size_type
058     //这个值可能与编译器,编译选项,操作系统,类型T等的不同而不同
059     cout<<"操作2:"<<endl;
060     vector<int>::size_type mv1=v1.max_size();
061     vector<string>::size_type mv2=v2.max_size();
062     cout<<"v1.max_size()="<<mv1<<endl; //你的输出值不一定和我的一样
063     cout<<"v2.max_size()="<<mv2<<endl; //mv2和mv1也不一定相同
064     //max_size()函数的返回值和当前容器元素的个数没有关系
065     //改变当前容器元素的个数和结果不变
066     v1.push_back(15); //在最尾加入一个10
067     v2.pop_back();    //把最尾元素删除
068     cout<<"增减容器元素后:"<<endl;
069     mv1=v1.max_size();
070     mv2=v2.max_size();
071     cout<<"v1.max_size()="<<mv1<<endl;
072     cout<<"v2.max_size()="<<mv2<<endl;
073     //注意:对同一个容器对象,size函数和max_size函数的返回类型是一样的
074     //其实,我们不用定义 mv1和mv2,可以分别重用sv1和sv2
075     cout<<"mv1用sv1替换,mv2用sv2替换后:"<<endl;
076     sv1=v1.max_size();
077     sv2=v2.max_size();
078     cout<<"v1.max_size()="<<sv1<<endl;
079     cout<<"v2.max_size()="<<sv2<<endl;
080      
081     //操作3:
082     //empty()成员函数,如果当前容器没有容纳任何元素,
083     //则返回true,否则返回false.
084     cout<<"操作3:"<<endl;
085     if(v1.empty())
086         cout<<"v1是空的"<<endl;
087     else
088         cout<<"v1不是空的"<<endl;
089     v1.clear(); //清空v1
090     cout<<"清空v1后:"<<endl;
091     if(v1.empty())
092         cout<<"v1是空的"<<endl;
093     else
094         cout<<"v1不是空的"<<endl;
095      
096     //操作4:
097     //resize(n)成员函数改变当前容器的大小为n
098     //如果n小于原来的大小,则删除多出来的元素
099     //如果n大于原来的大小,则添加的元素采用值初始化
100     //如果n等于原来的大小,则不操作
101     cout<<"操作4:"<<endl;
102     v1.push_back(10); //操作3中已经将v1清空,现在为其添加两个元素
103     v1.push_back(20);
104     cout<<"v1.size()="<<v1.size()<<endl;
105     int i;
106     for(i=0; i!=v1.size(); i++)
107         cout<<"v1["<<i<<"]="<<v1[i]<<endl;
108     v1.resize(1);
109     cout<<"调整v1的大小为1后:"<<endl;
110     cout<<"v1.size()="<<v1.size()<<endl;
111     for(i=0; i!=v1.size(); i++)
112         cout<<"v1["<<i<<"]="<<v1[i]<<endl;
113     v1.resize(5);
114     cout<<"再调整v1的大小为5后:"<<endl;
115     cout<<"v1.size()="<<v1.size()<<endl;
116     for(i=0; i!=v1.size(); i++)
117         cout<<"v1["<<i<<"]="<<v1[i]<<endl;
118          
119     //操作5:
120     //resize(n,t)成员函数改变当前容器的大小为n
121     //如果n小于原来的大小,则删除多出来的元素
122     //如果n大于原来的大小,则添加的元素都为t
123     //如果n等于原来的大小,则不操作
124     cout<<"操作5:"<<endl;
125     v1.clear();       清空v1
126     v1.push_back(10); //为其添加两个元素
127     v1.push_back(20);
128     cout<<"v1.size()="<<v1.size()<<endl;
129     for(i=0; i!=v1.size(); i++)
130         cout<<"v1["<<i<<"]="<<v1[i]<<endl;
131     v1.resize(1, 100);
132     cout<<"v1.resize(1, 100)后:"<<endl;
133     cout<<"v1.size()="<<v1.size()<<endl;
134     for(i=0; i!=v1.size(); i++)
135         cout<<"v1["<<i<<"]="<<v1[i]<<endl;
136     v1.resize(5, 100);
137     cout<<"v1.resize(5, 100)后:"<<endl;
138     cout<<"v1.size()="<<v1.size()<<endl;
139     for(i=0; i!=v1.size(); i++)
140         cout<<"v1["<<i<<"]="<<v1[i]<<endl;
141      
142     return 0;
143 }
144  
145  
146 //============================
147 //运行结果:
148 //============================
149 // 操作1:
150 // v1.size()=0
151 // v2.size()=10
152 // 增减容器元素后:
153 // v1.size()=1
154 // v2.size()=9
155 // 操作2:
156 // v1.max_size()=1073741823
157 // v2.max_size()=1073741823
158 // 增减容器元素后:
159 // v1.max_size()=1073741823
160 // v2.max_size()=1073741823
161 // mv1用sv1替换,mv2用sv2替换后:
162 // v1.max_size()=1073741823
163 // v2.max_size()=1073741823
164 // 操作3:
165 // v1不是空的
166 // 清空v1后:
167 // v1是空的
168 // 操作4:
169 // v1.size()=2
170 // v1[0]=10
171 // v1[1]=20
172 // 调整v1的大小为1后:
173 // v1.size()=1
174 // v1[0]=10
175 // 再调整v1的大小为5后:
176 // v1.size()=5
177 // v1[0]=10
178 // v1[1]=0
179 // v1[2]=0
180 // v1[3]=0
181 // v1[4]=0
182 // 操作5:
183 // v1.size()=2
184 // v1[0]=10
185 // v1[1]=20
186 // v1.resize(1, 100)后:
187 // v1.size()=1
188 // v1[0]=10
189 // v1.resize(5, 100)后:
190 // v1.size()=5
191 // v1[0]=10
192 // v1[1]=100
193 // v1[2]=100
194 // v1[3]=100
195 // v1[4]=100
196 //============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值