zoukankan      html  css  js  c++  java
  • 谈谈vector容器的三种遍历方法

    说明:本文仅供学习交流。转载请标明出处。欢迎转载!

             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();//注意须要用const_iterator,由于容器是const类型
    	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)//方法三,将容器的内容拷贝到cout绑定的迭代器
    {
    	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);//输出 0 1 2 3 4 5 6 7 8 9
    	print_vec2(v);//输出 0 1 2 3 4 5 6 7 8 9
    	print_vec3(v);//输出 0 1 2 3 4 5 6 7 8 9
    	return 0;
    }


  • 相关阅读:
    如何设置backBarButtonItem的title和action
    让navigationItem.leftBarButtonItem具有backBarButtonItem的外观样式
    在Xcode中添加空模板
    reason:'CALayer position contains NaN: [160 nan]'
    git的注册与使用:代码的版本控制器
    iOS开发零基础教程之Git的一些常用命令
    iOS开发零基础教程之生成git所需的SSH keys
    iOS开发零基础教程之在终端(Terminal)里安装oh my zsh
    iOS开发零基础教程之Homebrew的安装
    [原]ibatis 数据库时间 插入数据
  • 原文地址:https://www.cnblogs.com/llguanli/p/8321814.html
Copyright © 2011-2022 走看看