STL 容器和迭代器连载3_顺序容器初始化
1 /*- ========================================================== 2 * 文件名 :STL_con_ite_3.cpp 3 * 开发人员:袁培荣 4 * 当前版本:1.0.0.2595 5 * 创建时间:2012-05-20 6 * 修改时间:2012-05-20 7 * 功能说明:STL 容器和迭代器连载3_顺序容器初始化 8 * 版权说明:版权所有 袁培荣 YuanPeirong 9 * 编译环境:Windows 7(x64) SP1 简体中文专业版 10 * 编译器: Visual Studio 2010 SP1(中文旗舰版) 11 MinGW 20120426 GNU GCC 4.6.2 12 Visual C++ 6.0 SP6(中文企业版) 13 - ==========================================================*/ 14 15 #include <iostream> 16 #include <vector> 17 #include <list> 18 #include <deque> 19 20 using std::cout; 21 using std::endl; 22 using std::vector; 23 using std::list; 24 using std::deque; 25 26 int main(int argc, char* argv[]) 27 { 28 //在STL vector 介绍连载1-2-3中, 29 //曾经介绍四种构造函数, 30 //这里给出容器的所有五种构造函数, 31 //多的一种来自于迭代器 32 vector<int> v1; //默认构造函数,v1为空 33 vector<int> v2(v1); //v2构造为v1的一个副本 34 vector<int> v3(10,5); //v3包含10个值为5的元素 35 vector<int> v4(10); //v4包含含有初始化值的元素的10个副本 36 //其中第3第4种只适用于顺序容器 37 38 //第五种,用迭代器标记的一个左闭合区间构造 39 vector<int>::iterator iter1=v3.begin()+1; 40 vector<int>::iterator iter2=v3.end()-1; 41 vector<int> v5(iter1, iter2); 42 //再次强调.end()和左闭区间的概念 43 //v3.begin()指向 v3[0], v3.begin()+1 指向 v3[1] 44 //v3.end()指向v3的最后一个元素v3[9]的再后面一个内存地址 45 //v3.end()-1 才指向v3的最后一个元素v3[9] 46 //但是v5不是从 v3[1] 到 v3[9](就是说v3[1]包括,v3[9]不包括) 47 //而是 v3[1] 到 v3[8] 分别赋值给 v5[0] 到 v5[7] 48 //下面 v5的长度输出为8而不9证明了这一点 49 cout<<"v1到v5的长度分别为:"<<endl; 50 cout<<v1.size()<<endl; 51 cout<<v2.size()<<endl; 52 cout<<v3.size()<<endl; 53 cout<<v4.size()<<endl; 54 cout<<v5.size()<<endl; 55 56 //下面指出两种构造错误: 57 58 // vector<double> dv1(v5); 59 // dv1 是 vector<double>类型 60 // v5 是 vector<int>类型 61 // 两种类型不一样,不能构造 62 63 // lisr<int> lv1(v5); 64 // lv1 是 list<int>类型 65 // v5 是 vector<int>类型 66 // 两种类型不一样,不能构造 67 68 //另外,初充一点,容器采用动态内存分配, 69 //因此,对于第3和第4种构造方法, 70 //我们可以用变量为其指定参数 71 //而不一定要像数组那样用常量 72 //如: 73 cout<<"测试动态内存分配"<<endl; 74 int n=5; 75 double d=9.9; 76 vector<double> dv2(n,d); 77 n=6; 78 vector<double> dv3(n); 79 80 for(vector<double>::size_type i=0; i!=dv2.size(); i++) 81 cout<<"dv2["<<i<<"]="<<dv2[i]<<endl; 82 83 //我们换一种方法写for循环,采用迭代器 84 cout<<"dv3共有"<<dv3.size()<<"个元素,分别为:"<<endl; 85 for(vector<double>::iterator iter=dv3.begin(); 86 iter!=dv3.end(); iter++) 87 cout<<*iter<<endl; 88 89 return 0; 90 } 91 92 93 //============================ 94 //运行结果: 95 //============================ 96 // v1到v5的长度分别为: 97 // 0 98 // 0 99 // 10 100 // 10 101 // 8 102 // 测试动态内存分配 103 // dv2[0]=9.9 104 // dv2[1]=9.9 105 // dv2[2]=9.9 106 // dv2[3]=9.9 107 // dv2[4]=9.9 108 // dv3共有6个元素,分别为: 109 // 0 110 // 0 111 // 0 112 // 0 113 // 0 114 // 0 115 //============================