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