C++之STL六大组件以及vector在标准库的使用以及模拟标准库的vector实现

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的空间?
解决:创建一个空的临时对象,然后将临时对象赋值或交换.

猜你喜欢

转载自blog.csdn.net/yinghuhu333333/article/details/80737977
今日推荐