谈谈vector容器的三种遍历方法

本文介绍了三种遍历C++ STL vector容器的方法:通过下标访问、使用迭代器及运用copy函数结合输出流迭代器。这三种方式各有优势,适用于不同场景。

         vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组。在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法。

       方法一:采用下标遍历

        由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容器内部的元素,具体代码如下:

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<vector>  
  3. using namespace std;  
  4. typedef vector<int> vInt;  
  5. void print_vec1(const vInt & v)//方法一,采用下标访问  
  6. {  
  7.     int i;  
  8.     for(i=0;i<v.size();i++)  
  9.     {  
  10.         cout<<v[i]<<" ";  
  11.     }  
  12.     cout<<endl;  
  13. }  

       方法二:采用迭代器遍历

       我们都知道,数组和指针有着天然的练习。如果我们将vector容器看成一个数组,那么我们也可以将迭代器看出一个指针,实际上迭代器的内部实现就是对一个原生指针的封装,迭代器本身就是一个智能指针。下面给出采用迭代器遍历的代码:

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<vector>  
  3. using namespace std;  
  4.   
  5. typedef vector<int> vInt;  
  6. void print_vec2(const vInt &v)//方法二,采用迭代器访问  
  7. {  
  8.     vInt::const_iterator iter=v.begin();//注意需要用const_iterator,因为容器是const类型  
  9.     while(iter!=v.end())  
  10.     {  
  11.         cout<<*iter++<<" ";  
  12.     }  
  13.     cout<<endl;  
  14. }  

        方法三:利用copy函数遍历

         在泛型算法中,提供了一个复制函数copy,copy的函数原型大致为:copy(b,e,b1),作用是将迭代器范围[b,e)内的元素复制到以迭代器b1开始的位置。设想,如果我们将b1设置为一个输出流迭代器ostream_iterator,那么我们就把内容复制到输出流cout,相当于显示除了所有元素,具体代码如下:

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<vector>  
  3. #include<iterator>//用到几种迭代器  
  4. #include<algorithm>//用到几个泛型算法  
  5. using namespace std;  
  6. typedef vector<int> vInt;  
  7. void print_vec3(const vInt &v)//方法三,将容器的内容复制到cout绑定的迭代器  
  8. {  
  9.     copy(v.begin(),v.end(),ostream_iterator<int>(cout," ") );  
  10.     cout<<endl;  
  11. }  

        下面我们给出主函数下的测试代码:

 

[cpp]  view plain  copy
  1. int main()  
  2. {  
  3.     vInt v;  
  4.     int i;  
  5.     for(i=0;i<10;i++)  
  6.     {  
  7.         v.push_back(i);  
  8.     }  
  9.     print_vec1(v);//输出 0 1 2 3 4 5 6 7 8 9  
  10.     print_vec2(v);//输出 0 1 2 3 4 5 6 7 8 9  
  11.     print_vec3(v);//输出 0 1 2 3 4 5 6 7 8 9  
  12.     return 0;  
  13. }  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值