您的位置:首页 > 其它

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

2012-05-26 22:32 274 查看
/*- ==========================================================
*     文件名  :STL_con_ite_7.cpp
*     开发人员:袁培荣
*     当前版本:1.0.0.2595
*     创建时间:2012-05-26
*     修改时间:2012-05-26
*     功能说明:STL 容器和迭代器连载7_容器大小的操作
*     版权说明:版权所有 袁培荣 YuanPeirong
*     编译环境:Windows 7(x64) SP1 简体中文专业版
*     编译器:  Visual Studio 2010 SP1(中文旗舰版)
MinGW 20120426 GNU GCC 4.6.2
Visual 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[])
{
//首先,请你看本文的标题,是容器大小的操作,
//而非顺序容器大小的操作,也就是说:
//本文的内容适用所有容器,而不仅仅是顺序容器。

//操作1:
//size()成员函数返回当前容器中元素的个数
//返回类型为 容器名<T>::size_type
cout<<"操作1:"<<endl;
vector<int> v1;
vector<string> v2(10);
vector<int>::size_type sv1=v1.size();
vector<string>::size_type sv2=v2.size();
cout<<"v1.size()="<<sv1<<endl;
cout<<"v2.size()="<<sv2<<endl;
//注意:不能用 vector<int>::size_type类型来接收 v2.size()
//因为一个是vector<int>类,另一个是vector<string>类,没有任何关系。
//如果容器元素有增减,我们就要重新获取其size。
v1.push_back(10); //在最尾加入一个10
v2.pop_back();    //把最尾元素删除
cout<<"增减容器元素后:"<<endl;
sv1=v1.size(); //重新获取容器的大小
sv2=v2.size(); //重新获取容器的大小
cout<<"v1.size()="<<sv1<<endl;
cout<<"v2.size()="<<sv2<<endl;

//操作2:
//max_size() 成员函数返回当前容器所能容纳元素数量的最大值
//(注:包括可重新分配内存) 返回类型为 容器名<T>::size_type
//这个值可能与编译器,编译选项,操作系统,类型T等的不同而不同
cout<<"操作2:"<<endl;
vector<int>::size_type mv1=v1.max_size();
vector<string>::size_type mv2=v2.max_size();
cout<<"v1.max_size()="<<mv1<<endl; //你的输出值不一定和我的一样
cout<<"v2.max_size()="<<mv2<<endl; //mv2和mv1也不一定相同
//max_size()函数的返回值和当前容器元素的个数没有关系
//改变当前容器元素的个数和结果不变
v1.push_back(15); //在最尾加入一个10
v2.pop_back();    //把最尾元素删除
cout<<"增减容器元素后:"<<endl;
mv1=v1.max_size();
mv2=v2.max_size();
cout<<"v1.max_size()="<<mv1<<endl;
cout<<"v2.max_size()="<<mv2<<endl;
//注意:对同一个容器对象,size函数和max_size函数的返回类型是一样的
//其实,我们不用定义 mv1和mv2,可以分别重用sv1和sv2
cout<<"mv1用sv1替换,mv2用sv2替换后:"<<endl;
sv1=v1.max_size();
sv2=v2.max_size();
cout<<"v1.max_size()="<<sv1<<endl;
cout<<"v2.max_size()="<<sv2<<endl;

//操作3:
//empty()成员函数,如果当前容器没有容纳任何元素,
//则返回true,否则返回false.
cout<<"操作3:"<<endl;
if(v1.empty())
cout<<"v1是空的"<<endl;
else
cout<<"v1不是空的"<<endl;
v1.clear(); //清空v1
cout<<"清空v1后:"<<endl;
if(v1.empty())
cout<<"v1是空的"<<endl;
else
cout<<"v1不是空的"<<endl;

//操作4:
//resize(n)成员函数改变当前容器的大小为n
//如果n小于原来的大小,则删除多出来的元素
//如果n大于原来的大小,则添加的元素采用值初始化
//如果n等于原来的大小,则不操作
cout<<"操作4:"<<endl;
v1.push_back(10); //操作3中已经将v1清空,现在为其添加两个元素
v1.push_back(20);
cout<<"v1.size()="<<v1.size()<<endl;
int i;
for(i=0; i!=v1.size(); i++)
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
v1.resize(1);
cout<<"调整v1的大小为1后:"<<endl;
cout<<"v1.size()="<<v1.size()<<endl;
for(i=0; i!=v1.size(); i++)
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
v1.resize(5);
cout<<"再调整v1的大小为5后:"<<endl;
cout<<"v1.size()="<<v1.size()<<endl;
for(i=0; i!=v1.size(); i++)
cout<<"v1["<<i<<"]="<<v1[i]<<endl;

//操作5:
//resize(n,t)成员函数改变当前容器的大小为n
//如果n小于原来的大小,则删除多出来的元素
//如果n大于原来的大小,则添加的元素都为t
//如果n等于原来的大小,则不操作
cout<<"操作5:"<<endl;
v1.clear();       ////清空v1
v1.push_back(10); //为其添加两个元素
v1.push_back(20);
cout<<"v1.size()="<<v1.size()<<endl;
for(i=0; i!=v1.size(); i++)
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
v1.resize(1, 100);
cout<<"v1.resize(1, 100)后:"<<endl;
cout<<"v1.size()="<<v1.size()<<endl;
for(i=0; i!=v1.size(); i++)
cout<<"v1["<<i<<"]="<<v1[i]<<endl;
v1.resize(5, 100);
cout<<"v1.resize(5, 100)后:"<<endl;
cout<<"v1.size()="<<v1.size()<<endl;
for(i=0; i!=v1.size(); i++)
cout<<"v1["<<i<<"]="<<v1[i]<<endl;

return 0;
}

//============================
//运行结果:
//============================
// 操作1:
// v1.size()=0
// v2.size()=10
// 增减容器元素后:
// v1.size()=1
// v2.size()=9
// 操作2:
// v1.max_size()=1073741823
// v2.max_size()=1073741823
// 增减容器元素后:
// v1.max_size()=1073741823
// v2.max_size()=1073741823
// mv1用sv1替换,mv2用sv2替换后:
// v1.max_size()=1073741823
// v2.max_size()=1073741823
// 操作3:
// v1不是空的
// 清空v1后:
// v1是空的
// 操作4:
// v1.size()=2
// v1[0]=10
// v1[1]=20
// 调整v1的大小为1后:
// v1.size()=1
// v1[0]=10
// 再调整v1的大小为5后:
// v1.size()=5
// v1[0]=10
// v1[1]=0
// v1[2]=0
// v1[3]=0
// v1[4]=0
// 操作5:
// v1.size()=2
// v1[0]=10
// v1[1]=20
// v1.resize(1, 100)后:
// v1.size()=1
// v1[0]=10
// v1.resize(5, 100)后:
// v1.size()=5
// v1[0]=10
// v1[1]=100
// v1[2]=100
// v1[3]=100
// v1[4]=100
//============================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: