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

11 篇文章 0 订阅
/*- ==========================================================
*     文件名  :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
//============================


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值