vectour向量容器的基本使用

来源:互联网 发布:电力造价软件 编辑:程序博客网 时间:2024/06/08 06:39

作为数组的一个泛化推广的vector容器,不仅可以进行数组一样的元素随机访问,还可以在容器的尾端插入新元素,是一个实现了Random Access Container 和Back Insertion Sequence概念的模型。

vector容器是一个线性的结构,用M_start、M_finish、M_end_of_storage分别指向存放向量的起始字节位置、当前最后一个向量元素的末尾字节位置和整个容器所占有的内存空间的末尾字节。

vector提供的push_back函数,常用来进行vector容器的初始化。push_back函数在容器的尾端插入新元素value。

vector的元素访问可以采用数组或迭代器的方式进行遍历访问。代码如下:

//数组的方式访问vector元素#include<iostream>#include<vector>using namespace std;int main(void){    vector<int> v;    v.push_back(1);    v.push_back(2);    v.push_back(3);    for(int i = 0;i<v.size();i++)    {        cout<<"v["<<i<<"]="<<v[i]<<endl;    }<pre name="code" class="cpp">    getchar();
 return 0;}

//迭代器的方式访问vector元素#include<iostream>#include<vector>using namespace std;int main(void){    vector<int> v;    v.push_back(1);    v.push_back(2);    v.push_back(3);    vector<int>::iterator i,iend;    iend = v.end();    int j = 0;    for(i = v.begin();i != iend;i++,j++)    {        cout<<"v["<<j<<"]="<<*i<<endl;    }<pre name="code" class="cpp">    getchar();
 return 0;}

元素的插入:

vector可以用push_back将元素添加至容器的尾端,也可以使用insert将元素添加至指定的位置。由于插入需要将插入位置之后的元素往后移动,所以insert比push_back更耗时。

//vector中插入元素#include<iostream>#include<vector>using namespace std;int main(void){    vector<int> v;    v.push_back(1);    v.push_back(2);    v.push_back(3);    v.push_back(5);    v.insert(v.begin()+3,4);//在3后面添加4    v.insert(v.begin(),0);//在1前面添加0    v.insert(v.end(),6);//在5后面插入6    for(int i = 0;i<v.size();i++)    {        cout<<"v["<<i<<"]="<<v[i]<<endl;    }<pre name="code" class="cpp">    getchar();    return 0;}


元素的删除:

vector提供了一个erase函数,用来删除迭代器pos所指的元素或是迭代器区间[first,last)的所有元素,它的原型如下:

(1) iterator erase(iterator pos)

(2) iterator erase(iterator first,iterator last)

另外还可以调用vector的void clear()函数,它调用了erase函数,将[begin(),end())间的元素全部删除掉。

//删除vector元素#include<iostream>#include<vector>using namespace std;void print(vector<int>& v);int main(void){    vector<int> v;    v.push_back(1);    v.push_back(2);    v.push_back(3);    v.push_back(5);    v.insert(v.begin()+3,4);//在3后面添加4    v.insert(v.begin(),0);//在1前面添加0    v.insert(v.end(),6);//在5后面插入6    print(v);    v.erase(v.begin());//删除第一个元素0    cout<<"删除第一个元素0:"<<endl;    print(v);    v.erase(v.begin()+4,v.end());//删除第5和第6个元素5,6    cout<<"删除第5和第6个元素5,6:"<<endl;    print(v);    v.clear();//清除所有元素    cout<<"清除所有元素:"<<endl;    print(v);    getchar();    return 0;}void print(vector<int>& v){for(int i = 0;i<v.size();i++)    {        cout<<"v["<<i<<"]="<<v[i]<<endl;    }}

元素的反向遍历:

利用vector提供的反向迭代器reverse_iterator,以及相应的rbegin()和rend()函数,可以反向遍历

vector容器的元素。rbegin函数返回的迭代器指向反向遍历的首元素,rend函数返回的迭代器指向反向遍历的结束元素。

//反向遍历vector元素#include<iostream>#include<vector>using namespace std;void print(vector<int>& v);int main(void){    vector<int> v;    v.push_back(1);    v.push_back(2);    v.push_back(3);    v.push_back(5);    v.insert(v.begin()+3,4);//在3后面添加4    v.insert(v.begin(),0);//在1前面添加0    v.insert(v.end(),6);//在5后面插入6    print(v);    vector<int>::reverse_iterator ri,riend;    riend = v.rend();    for(ri = v.rbegin();ri != riend;ri++)        cout<<*ri<<endl;    getchar();    return 0;}void print(vector<int>& v){for(int i = 0;i<v.size();i++)    {        cout<<"v["<<i<<"]="<<v[i]<<endl;    }}

两个vector元素的交换:

可以使用swap算法,实现交换两个vector容器元素。

#include<iostream>#include<vector>using namespace std;void print(vector<int>& v);int main(void){    vector<int> v1,v2;    v1.push_back(1);    v1.push_back(2);    v1.push_back(3);    v1.push_back(4);    v1.push_back(5);    v2.push_back(6);v2.push_back(7);v2.push_back(8);v2.push_back(9);v2.push_back(10);cout<<"交换前:"<<endl;cout<<"v1:"<<endl;    print(v1);cout<<"v2:"<<endl;print(v2);swap(v1,v2);cout<<"交换后:"<<endl;cout<<"v1:"<<endl;print(v1);cout<<"v2:"<<endl;print(v2);getchar();    return 0;}void print(vector<int>& v){for(int i = 0;i<v.size();i++)    {        cout<<"v["<<i<<"]="<<v[i]<<endl;    }}

其他的常用函数:

  1. bool empty() 判断容器是否为空。若容器为空返回true,否则返回false。
  2. size_type size() 当前容器的实际元素个数。
  3. size_type max_size() 系统所允许的vector容器最大元素个数。
  4. size_type capacity() 当前可容纳的vector元素个数。
  5. reference front()  vector容器的首元素(引用),要求vector不为空。
  6. reference back()  vector容器的末元素(引用),要求vector不为空。
  7. void pop_back() 与push_back相反,在末尾删除一个元素。
0 0
原创粉丝点击