vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组。在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法。
方法一:采用下标遍历
由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容器内部的元素,具体代码如下:
- #include<iostream>
- #include<vector>
- using namespace std;
- typedef vector<int> vInt;
- void print_vec1(const vInt & v)
- {
- int i;
- for(i=0;i<v.size();i++)
- {
- cout<<v[i]<<" ";
- }
- cout<<endl;
- }
方法二:采用迭代器遍历
我们都知道,数组和指针有着天然的练习。如果我们将vector容器看成一个数组,那么我们也可以将迭代器看出一个指针,实际上迭代器的内部实现就是对一个原生指针的封装,迭代器本身就是一个智能指针。下面给出采用迭代器遍历的代码:
- #include<iostream>
- #include<vector>
- using namespace std;
-
- typedef vector<int> vInt;
- void print_vec2(const vInt &v)
- {
- vInt::const_iterator iter=v.begin();
- while(iter!=v.end())
- {
- cout<<*iter++<<" ";
- }
- cout<<endl;
- }
方法三:利用copy函数遍历
在泛型算法中,提供了一个复制函数copy,copy的函数原型大致为:copy(b,e,b1),作用是将迭代器范围[b,e)内的元素复制到以迭代器b1开始的位置。设想,如果我们将b1设置为一个输出流迭代器ostream_iterator,那么我们就把内容复制到输出流cout,相当于显示除了所有元素,具体代码如下:
- #include<iostream>
- #include<vector>
- #include<iterator>//用到几种迭代器
- #include<algorithm>//用到几个泛型算法
- using namespace std;
- typedef vector<int> vInt;
- void print_vec3(const vInt &v)
- {
- copy(v.begin(),v.end(),ostream_iterator<int>(cout," ") );
- cout<<endl;
- }
下面我们给出主函数下的测试代码:
- int main()
- {
- vInt v;
- int i;
- for(i=0;i<10;i++)
- {
- v.push_back(i);
- }
- print_vec1(v);
- print_vec2(v);
- print_vec3(v);
- return 0;
- }