STL vector 介绍连载1-2-3

STL简介:
STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。
STL被内建在你的编译系统之内。
 在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。

STL一般包括六大组件:
容器,算法,迭代器,仿函式,配接器,配置器。

vector简介:
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

 1 /*- ==========================================================
 2 *     文件名  :vector1.cpp
 3 *     开发人员:袁培荣
 4 *     当前版本:1.0.0.2595
 5 *     创建时间:2012-05-20
 6 *     修改时间:2012-05-20
 7 *     功能说明:STL vector 介绍连载1
 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>  //包含STL 的vector 头文件才能使用vector
17 
18 using std::cout;
19 using std::endl;
20 using std::vector; //vector是一个类模板,定义在命名空间std里面
21 
22 int main(int argc, char* argv[])
23 {
24     //vector类的四种构造方法
25     vector<int> v1;       //默认构造函数,v1为空
26     vector<int> v2(v1);   //v2构造为v1的一个副本
27     vector<int> v3(10,5); //v3包含10个值为5的元素
28     vector<int> v4(10);   //v4包含含有初始化值的元素的10个副本
29     
30     //用.size()成员函数取得各vector对象包含的元素个数,并输出
31     vector<int>::size_type l1=v1.size(); //.size()函数的返回类型为:
32     vector<int>::size_type l2=v2.size(); //vector<T>::size_type
33     vector<int>::size_type l3=v3.size(); //不过也可以用int型来接收
34     vector<int>::size_type l4=v4.size(); //但建议用标准类型vector<T>::size_type
35 
36     cout<<"l1="<<l1<<endl;
37     cout<<"l2="<<l2<<endl;
38     cout<<"l3="<<l3<<endl;
39     cout<<"l4="<<l4<<endl;
40     
41     //输出各vector对象包含的元素的值
42     vector<int>::size_type i;
43     
44     cout<<endl<<"输出v1值"<<endl;
45     for(i=0; i!=v1.size(); i++)     //C++程序员习惯于!=来进行判断
46         cout<<v1[i]<<" ";           //而非<或>或<=或>=
47                                     //这种用!=的方式更加科学和安全
48     cout<<endl<<"输出v2值"<<endl;   //这里,虽然v1,v2是空的
49     for(i=0; i!=v2.size(); i++)     //但for循环不会出错
50     cout<<v2[i]<<" ";               //只是循环体一次也不执行就结束for循环
51     
52     cout<<endl<<"输出v3值"<<endl;
53     for(i=0; i!=v3.size(); i++)    
54         cout<<v3[i]<<" ";           //另外,我们可以通过 对象名[下标]
55                                     //的方法来访问vector对象中各元素的值
56     cout<<endl<<"输出v4值"<<endl;   //下标从0开始,到 长度-1 结束
57     for(i=0; i!=v4.size(); i++)     
58         cout<<v4[i]<<" ";
59         
60     v3[5]=35;                      //对象名[下标] 的方式可作右值,也可作左值
61     cout<<endl<<"v3[5]="<<v3[5]<<endl;
62     
63     return 0;
64 }
65 
66 //=========================
67 // 运行结果:
68 //=========================
69 // l1=0
70 // l2=0
71 // l3=10
72 // l4=10
73 
74 // 输出v1值
75 
76 // 输出v2值
77 
78 // 输出v3值
79 // 5 5 5 5 5 5 5 5 5 5 
80 // 输出v4值
81 // 0 0 0 0 0 0 0 0 0 0 
82 // v3[5]=35
83 //=========================
 1 /*- ==========================================================
 2 *     文件名  :vector2.cpp
 3 *     开发人员:袁培荣
 4 *     当前版本:1.0.0.2595
 5 *     创建时间:2012-05-20
 6 *     修改时间:2012-05-20
 7 *     功能说明:STL vector 介绍连载2
 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>  //包含STL 的vector 头文件才能使用vector
17 
18 using std::cout;
19 using std::endl;
20 using std::vector; //vector是一个类模板,定义在命名空间std里面
21 
22 int main(int argc, char* argv[])
23 {
24     vector<int> v1;
25     vector<int> v2(10);
26 
27     //.empty()成员函数返回对象是否是空的
28     bool bv1=v1.empty(); //如果为空,返回ture
29     bool bv2=v2.empty(); //如果不为空,返回flase
30     cout<<"测试empty()成员函数"<<endl;
31     if(bv1) 
32         cout<<"v1是空的"<<endl;
33     else
34         cout<<"v1不是空的"<<endl;
35 
36     if(bv2) 
37         cout<<"v2是空的"<<endl;
38     else
39         cout<<"v2不是空的"<<endl;
40 
41     // "==" 操作符用来判断两个对象是否相等        
42     // 同时 !=, <, >, <=, >=这些操作符保持有惯有含义 
43     cout<<"测试 == 操作符"<<endl;
44     if(v1==v2)
45         cout<<"v1与v2相同"<<endl;   //如果相等返回true
46     else
47         cout<<"v1与v2不相同"<<endl; //如果不相等返回false    
48         
49 
50     //"=" 操作符可用于对象间赋值
51     v1=v2; //把v1的元素替换为v2中的元素的副本
52            //此时v1不再为空,而是和v2相等,证明如下
53     bv1=v1.empty();
54     cout<<"测试 = 操作符"<<endl;    
55     if(bv1) 
56         cout<<"v1是空的"<<endl;
57     else
58         cout<<"v1不是空的"<<endl;
59     if(v1==v2)
60         cout<<"v1与v2相同"<<endl;   
61     else
62         cout<<"v1与v2不相同"<<endl;
63         
64     return 0;
65 }
66 
67 //=========================
68 // 运行结果:
69 //=========================
70 // 测试empty()成员函数
71 // v1是空的
72 // v2不是空的
73 // 测试 == 操作符
74 // v1与v2不相同
75 // 测试 = 操作符
76 // v1不是空的
77 // v1与v2相同
78 //=========================
 1 /*- ==========================================================
 2 *     文件名  :vector3.cpp
 3 *     开发人员:袁培荣
 4 *     当前版本:1.0.0.2595
 5 *     创建时间:2012-05-20
 6 *     修改时间:2012-05-20
 7 *     功能说明:STL vector 介绍连载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>  //包含STL 的vector 头文件才能使用vector
17 
18 using std::cout;
19 using std::endl;
20 using std::vector; //vector是一个类模板,定义在命名空间std里面
21 
22 int main(int argc, char* argv[])
23 {
24     vector<int> v1(1);
25     vector<int> v2(10);
26 
27     //下标操作不能用于添加元素,因为下标越界不允许
28     //下面是演示,因为是错误代码,因为被注释
29     //下面想通过下标操作为v1加入5个元素,这是非法的
30     //而且这种错误在编译时是不报错的,但在运行时会出错
31     //显然这种错误更可怕
32     //=====错误代码起
33     // for(vector<int>::size_type i=1; i!=6; i++)
34         // v1[i]=i;
35     //=====错误代码止
36     //其实这种错误就是下标越界
37     //因为v1只存在 v1[0] 而v1[1]到v[5]是不存在的,因为是不能访问的
38     //因为系统没有为它们分配内存空间,根本访问不到
39     
40     //正确添加元素,我们要用到.push_back(t)成员函数
41     //.push_back(t)接受一个元素值t,并将其添加到对象的最后面
42     cout<<"测试push_back(t)成员函数"<<endl;
43     cout<<"添加前:"<<endl;
44     cout<<"v1[0]="<<v1[0]<<endl;
45     for(vector<int>::size_type j=1; j!=6; j++)
46     {    
47         v1.push_back(j);
48         cout<<"添加v1["<<j<<"]="<<v1[j]<<endl;
49     }
50     
51     return 0;
52 }
53 
54 //=========================
55 // 运行结果:
56 //=========================
57 // 测试push_back(t)成员函数
58 // 添加前:
59 // v1[0]=0
60 // 添加v1[1]=1
61 // 添加v1[2]=2
62 // 添加v1[3]=3
63 // 添加v1[4]=4
64 // 添加v1[5]=5
65 //=========================
66 
67 //=========================
68 //总结:
69 //=========================
70 //vector是C++标准中STL组件的核心内容之一
71 //它采用最新的泛型编程技术实现,其本质是一个类模板
72 //vector可以用来替换不安全的数组操作
73 //并且它可以动态的增减元素
74 //(这里没有演示减,主要是要和后面的迭代器一起介绍)
75 //这是数组所不能做到的。
76 //相比JAVA的vector的增减机制,C++的vector更加灵活和科学
77 //数组可以配合指针进行灵活操作,这一点Java的数组不行
78 //而C++的vector可以配合迭代器进行更灵活操作,这一点Java的vector不行
79 //C++的vector和迭代器可以很好地替代不安全的数组和指针
80 //我们在编程时要尽量不用数组,能用迭代器的地方可用其代替指针
81 //而尽可能的采用vector和迭代器
82 //当然,数组可以不用,指针还是不能被取代的
83 //C++99标准的推出了智能指针
84 //而C++11标准更是推出了两个更加智能的指针 
85 //=========================
86 //接下去,将介绍迭代器和vector的配合使用。
87 //=========================

 

posted @ 2012-05-20 16:26  天远  阅读(199)  评论(0)    收藏  举报

版权所有 © 2010-2020 YuanPeirong TianYuan All Rights Reserved. Powered By 天远