STL之vector

简介

vector(向量)相当于一个数组,它是在内存中分配一块连续的的存储空间。支持不指定vector的大小,当所存数据的大小超过了分配的存储空间,这时候会再次重新分配一块较大的内存。这就相当于我们可以不用指定vector的大小。反观数组的话,数组的大小就只可以开到1e6的大小,当我们的数据规模超过了1e6的话,想要用数组来存这些数据的就比较麻烦。

用法:

要使用vector,你的头文件就必须包括下面的代码:

 

#include<vector>

 

定义一个vector的方法:

 

vector<int> A;  //定义了一个类型为int的vector

 

我们可以看到定义vector为:vector<数据类型>  变量名

成员函数:

//函数                     表述
A.at(index)              //传回索引为index的数据,如果index越界,抛出out—of—range。 
A.back()                 //传回最后一个数据,不检查这个数据是否存在。 
A.begin()                //得到数据的头指针,用迭代器接受。 
A.end()                  //得到数据的尾指针,用迭代器接受。
A.capacity()             //返回容器中的数据个数。 
A.reserve(x)             //保存x个容量。 
A.clear()                //清除容器中的所有数据。
A.empty()                //判断容器是否为空。
A.erase(pos)             //删除pos位置的数据,并返回下一个数据的地址。
A.erase(beg,end)         //删除[beg,end]区间的数据,并返回下一个数据的地址。
A.front()                //传回第一个数据。
A.insert(pos,elem)       //在pos这个位置插入一个elem拷贝,传回新数据位置。
A.max_size()             //返回容器中的最大数据的数量。
A.pop_back()             //删除最后一个数据。
A.push_back(x)           //将数据x存到容器的尾部。
A.size()                 //返回容器中实际数据的个数。
A1.swap(A2)              //将A1和A2的数据互换。
vector<elem> A           //创建一个空的vector。
vector<elem>A1(A2)       //复制一个vector。
vector<elem>A(n)         //创建一个vector,含有n个数据。
A~vector<elem>()         //销毁所有数据,释放内存。
 

 向vector中添加一个元素:

for(int i=0;i<=10;i++)
       A.push_back(i);//添加到vector的尾部,此时容器中有1—10元素.

 访问vector中的元素:

访问第一个元素:

int frist=A.front();//返回容器的第一个元素。

访问最后一个元素:

int last=A.back();//返回容器的最后一个元素。 

访问指定索引的元素:

int aim=A.at(2)  //返回索引为2的元素的值

利用地址来访问元素:

         要用地址来访问元素,首先我们要用到成员函数中的A.begin()和A.end()这两个函数,那么就需要用迭代器来接受这个指针,因此需要用下面的代码来定义一个迭代器:

vector<int>::iterator it;//定义一个迭代器。 

           我们要用这个迭代器来访问vector中的每一个元素,我们可以用以下代码来实现:

for(it=A.begin();it!=A.end();it++)//用迭代器来接受地址 。用指针输出容器中的所有的数据。 
       cout<<*it<<" " ;

删除vector中的元素:

删除尾部元素:

    A.pop_back();//删除最后一个元素

vector中还有许多的用法,可以根据成员函数对vector进行操作。其中的数据插入和在尾部添加数据的方法与数组比较的话就非常的方便了。

实例说明vector中一些常用成员函数的用法:

 

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> A;
    vector<int>::iterator it;//定义一个迭代器。  
    for(int i=0;i<=10;i++)
       A.push_back(i);//添加到vector的尾部,此时容器中有1—10元素. 
    A.pop_back();//删除最后一个元素,此时容器中有1—9元素。
    int num_1=A.size();
    cout<<"当前容器容量为:"<<num_1<<endl;
    for(int i=0;i<=9;i++)
      cout<<A.at(i)<<" ";//用at函数输出容器中的所有数据 。 
    cout<<endl; 
    cout<<"在容器尾部添加元素:10"<<endl; 
    A.push_back(10);//将10添加到容器的尾部。 
    int num_2=A.size();//返回容器中的数量。 
    int frist=A.front();//返回容器的第一个元素。
    cout<<"当前容器的第一个元素为 :"<<frist<<endl;
    int last=A.back();//返回容器的最后一个元素。 
    cout<<"容器的最后一个元素为:"<<last<<endl;
    cout<<"当前容器容量为:"<<num_2  <<endl;
    for(it=A.begin();it!=A.end();it++)//用迭代器来接受地址 。用指针输出容器中的所有的数据。 
       cout<<*it<<" " ;
       return 0;
}
 

 

运行结果:

 

 

 

 

 

 

posted @ 2019-09-16 16:30  香格里拉太子zo  阅读(178)  评论(0编辑  收藏  举报