001 | /*- ========================================================== |
002 | * 文件名 :STL_con_ite_3.cpp |
003 | * 开发人员:袁培荣 |
004 | * 当前版本:1.0.0.2595 |
005 | * 创建时间:2012-05-20 |
006 | * 修改时间:2012-05-20 |
007 | * 功能说明:STL 容器和迭代器连载3_顺序容器初始化 |
008 | * 版权说明:版权所有 袁培荣 YuanPeirong |
009 | * 编译环境:Windows 7(x64) SP1 简体中文专业版 |
010 | * 编译器: Visual Studio 2010 SP1(中文旗舰版) |
011 | MinGW 20120426 GNU GCC 4.6.2 |
012 | Visual C++ 6.0 SP6(中文企业版) |
013 | - ==========================================================*/ |
014 |
015 | #include <iostream> |
016 | #include <vector> |
017 | #include <list> |
018 | #include <deque> |
019 |
020 | using std::cout; |
021 | using std::endl; |
022 | using std::vector; |
023 | using std::list; |
024 | using std::deque; |
025 |
026 | int main( int argc, char * argv[]) |
027 | { |
028 | //在STL vector 介绍连载1-2-3中, |
029 | //曾经介绍四种构造函数, |
030 | //这里给出容器的所有五种构造函数, |
031 | //多的一种来自于迭代器 |
032 | vector< int > v1; //默认构造函数,v1为空 |
033 | vector< int > v2(v1); //v2构造为v1的一个副本 |
034 | vector< int > v3(10,5); //v3包含10个值为5的元素 |
035 | vector< int > v4(10); //v4包含含有初始化值的元素的10个副本 |
036 | //其中第3第4种只适用于顺序容器 |
037 | |
038 | //第五种,用迭代器标记的一个左闭合区间构造 |
039 | vector< int >::iterator iter1=v3.begin()+1; |
040 | vector< int >::iterator iter2=v3.end()-1; |
041 | vector< int > v5(iter1, iter2); |
042 | //再次强调.end()和左闭区间的概念 |
043 | //v3.begin()指向 v3[0], v3.begin()+1 指向 v3[1] |
044 | //v3.end()指向v3的最后一个元素v3[9]的再后面一个内存地址 |
045 | //v3.end()-1 才指向v3的最后一个元素v3[9] |
046 | //但是v5不是从 v3[1] 到 v3[9](就是说v3[1]包括,v3[9]不包括) |
047 | //而是 v3[1] 到 v3[8] 分别赋值给 v5[0] 到 v5[7] |
048 | //下面 v5的长度输出为8而不9证明了这一点 |
049 | cout<< "v1到v5的长度分别为:" <<endl; |
050 | cout<<v1.size()<<endl; |
051 | cout<<v2.size()<<endl; |
052 | cout<<v3.size()<<endl; |
053 | cout<<v4.size()<<endl; |
054 | cout<<v5.size()<<endl; |
055 | |
056 | //下面指出两种构造错误: |
057 | |
058 | // vector<double> dv1(v5); |
059 | // dv1 是 vector<double>类型 |
060 | // v5 是 vector<int>类型 |
061 | // 两种类型不一样,不能构造 |
062 | |
063 | // lisr<int> lv1(v5); |
064 | // lv1 是 list<int>类型 |
065 | // v5 是 vector<int>类型 |
066 | // 两种类型不一样,不能构造 |
067 | |
068 | //另外,初充一点,容器采用动态内存分配, |
069 | //因此,对于第3和第4种构造方法, |
070 | //我们可以用变量为其指定参数 |
071 | //而不一定要像数组那样用常量 |
072 | //如: |
073 | cout<< "测试动态内存分配" <<endl; |
074 | int n=5; |
075 | double d=9.9; |
076 | vector< double > dv2(n,d); |
077 | n=6; |
078 | vector< double > dv3(n); |
079 | |
080 | for (vector< double >::size_type i=0; i!=dv2.size(); i++) |
081 | cout<< "dv2[" <<i<< "]=" <<dv2[i]<<endl; |
082 | |
083 | //我们换一种方法写for循环,采用迭代器 |
084 | cout<< "dv3共有" <<dv3.size()<< "个元素,分别为:" <<endl; |
085 | for (vector< double >::iterator iter=dv3.begin(); |
086 | iter!=dv3.end(); iter++) |
087 | cout<<*iter<<endl; |
088 | |
089 | return 0; |
090 | } |
091 |
092 |
093 | //============================ |
094 | //运行结果: |
095 | //============================ |
096 | // v1到v5的长度分别为: |
097 | // 0 |
098 | // 0 |
099 | // 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 | //============================ |