您的位置:首页 > 其它

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

2012-05-20 21:31 323 查看
/*- ==========================================================
*     文件名  :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
//============================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: