STL 容器和迭代器连载3_顺序容器初始化

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 //============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值