/*- ========================================================== * 文件名 :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 //============================