STL 容器和迭代器連載7_容器大小的操做

/*- ==========================================================
*     文件名  :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
//============================
相關文章
相關標籤/搜索