STL六大组件:
1.容器(存放数据):是一种类模板,用来存放数据.
2.算法:是一种模板函数,实现各种可以共用的算法,如:find,sort等.
3.迭代器(封装):容器和算法之间的连接,不同的类型的容器通过迭代器可以使用同样的方法来遍历所有元素(例如:链表和数组都可以通过++来找到下一个元素).
4.空间配置器:负责空间的配置与管理.
5.配接器(适配器):例如:可以通过vector,list来实现stack,queue.
6.仿函数:重载了(),可以通过对象来调用(),对象可以像函数一样使用.例如:在排序时,对于排序的顺序可以通过仿函数当做参数去传递.
下面通过STL中的vector来简单介绍一下它的使用:
1.尾插,插入,以及打印的用法
9 vector<int> v;
10 v.push_back(0);
11 v.push_back(1);
12 v.insert(v.begin(),5);
13 v.insert(v.end(),10);
14 cout<<"正向打印:";
15 vector<int>:: iterator it = v.begin();
16 while(it != v.end())
17 {
18 cout<<*it<<" ";
19 ++it;
20 }
21 cout<<endl<<"~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
22 cout<<"反向打印:";
23 vector<int>:: reverse_iterator i = v.rbegin();
24 while(i != v.rend())
25 {
26 cout<<*i<<" ";
27 ++i;
28 }
29 cout<<endl;
结果:
2.reserve,resize,以及assign的使用这些都可以实现扩容
reserve:扩容,只是将容量增大.
resize:扩容的同时,将扩增的容量初始化.
assign:扩容并覆盖原来的值.
9 vector<int> v;
10 v.push_back(0);
11 v.push_back(1);
12 v.push_back(2);
13 v.push_back(3);
14 v.push_back(4);
15 vector<int>:: iterator it = v.begin();
16 while(it != v.end())
17 {
18 cout<<*it<<" ";
19 ++it;
20 }
21 cout<<endl;
22 cout<<"size:"<<v.size()<<endl;
23 cout<<"capacity:"<<v.capacity()<<endl;
24
25 cout<<"------------reserve-------------"<<endl;
26 v.reserve(10);
27 vector<int>:: iterator i = v.begin();
28 while(i != v.end())
29 {
30 cout<<*i<<" ";
31 ++i;
32 }
33 cout<<endl;
34 cout<<"size:"<<v.size()<<endl;
35 cout<<"capacity:"<<v.capacity()<<endl;
36
37 cout<<"------------resize-------------"<<endl;
38 v.resize(10);
39 vector<int>:: iterator t = v.begin();
40 while(t != v.end())
41 {
42 cout<<*t<<" ";
43 ++t;
44 }
45 cout<<endl;
46 cout<<"size:"<<v.size()<<endl;
47 cout<<"capacity:"<<v.capacity()<<endl;
48
49 cout<<"------------resize-------------"<<endl;
50 v.resize(20,5);
51 vector<int>:: iterator re = v.begin();
52 while(re != v.end())
53 {
54 cout<<*re<<" ";
55 ++re;
56 }
57 cout<<endl;
58 cout<<"size:"<<v.size()<<endl;
59 cout<<"capacity:"<<v.capacity()<<endl;
60
61 cout<<"------------assign-------------"<<endl;
62 v.assign(20,5);
63 vector<int>:: iterator e = v.begin();
64 while(e != v.end())
65 {
66 cout<<*e<<" ";
67 ++e;
68 }
69 cout<<endl;
70 cout<<"size:"<<v.size()<<endl;
71 cout<<"capacity:"<<v.capacity()<<endl;
结果:
以上都是调用标准的函数实现的.
下面的连接是自己模拟标准库实现的vector:
基于迭代器实现的vector
问题1:如何释放vector的空间?
解决:创建一个空的临时对象,然后将临时对象赋值或交换.