STL 容器和迭代器連載3_順序容器初始化

/*- ==========================================================
*     文件名  :STL_con_ite_3.cpp
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-05-20
*     修改時間:2012-05-20
*     功能說明:STL 容器和迭代器連載3_順序容器初始化
*     版權說明:版權全部 袁培榮 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>

using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;

int main(int argc, char* argv[])
{
    //在STL vector 介紹連載1-2-3中,
    //曾經介紹四種構造函數,
    //這裏給出容器的全部五種構造函數,
    //多的一種來自於迭代器
    vector<int> v1;       //默認構造函數,v1爲空
    vector<int> v2(v1);   //v2構造爲v1的一個副本
    vector<int> v3(10,5); //v3包含10個值爲5的元素
    vector<int> v4(10);   //v4包含含有初始化值的元素的10個副本
    //其中第3第4種只適用於順序容器
    
    //第五種,用迭代器標記的一個左閉合區間構造
    vector<int>::iterator iter1=v3.begin()+1; 
    vector<int>::iterator iter2=v3.end()-1;
    vector<int> v5(iter1, iter2);
    //再次強調.end()和左閉區間的概念
    //v3.begin()指向 v3[0], v3.begin()+1 指向 v3[1]
    //v3.end()指向v3的最後一個元素v3[9]的再後面一個內存地址
    //v3.end()-1 才指向v3的最後一個元素v3[9]
    //可是v5不是從 v3[1] 到 v3[9](就是說v3[1]包括,v3[9]不包括)
    //而是 v3[1] 到 v3[8] 分別賦值給 v5[0] 到 v5[7]
    //下面 v5的長度輸出爲8而不9證實了這一點
    cout<<"v1到v5的長度分別爲:"<<endl;
    cout<<v1.size()<<endl;
    cout<<v2.size()<<endl;
    cout<<v3.size()<<endl;
    cout<<v4.size()<<endl;
    cout<<v5.size()<<endl;
    
    //下面指出兩種構造錯誤:
    
    // vector<double> dv1(v5); 
    // dv1 是 vector<double>類型
    // v5 是 vector<int>類型
    // 兩種類型不同,不能構造
    
    // lisr<int> lv1(v5);
    // lv1 是 list<int>類型
    // v5 是 vector<int>類型
    // 兩種類型不同,不能構造
    
    //另外,初充一點,容器採用動態內存分配,
    //所以,對於第3和第4種構造方法,
    //咱們能夠用變量爲其指定參數
    //而不必定要像數組那樣用常量
    //如:
    cout<<"測試動態內存分配"<<endl;
    int n=5;
    double d=9.9;
    vector<double> dv2(n,d);
    n=6;
    vector<double> dv3(n);
    
    for(vector<double>::size_type i=0; i!=dv2.size(); i++)
        cout<<"dv2["<<i<<"]="<<dv2[i]<<endl;
    
    //咱們換一種方法寫for循環,採用迭代器
    cout<<"dv3共有"<<dv3.size()<<"個元素,分別爲:"<<endl;
    for(vector<double>::iterator iter=dv3.begin(); 
                                 iter!=dv3.end(); iter++)
        cout<<*iter<<endl;
        
    return 0;
}


//============================
//運行結果:
//============================
// v1到v5的長度分別爲:
// 0
// 0
// 10
// 10
// 8
// 測試動態內存分配
// dv2[0]=9.9
// dv2[1]=9.9
// dv2[2]=9.9
// dv2[3]=9.9
// dv2[4]=9.9
// dv3共有6個元素,分別爲:
// 0
// 0
// 0
// 0
// 0
// 0
//============================
相關文章
相關標籤/搜索