谈谈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;
}
谈谈vector容器的三种遍历方法的更多相关文章
- javase-常用三种遍历方法
javase-常用三种遍历方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public ...
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- Jquery中each的三种遍历方法
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
- Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较http://www.cnblogs.com/riskyer/p/3320357.html JAVA LIST 遍历http://blog.csdn.net/lo ...
- 2017.10.25 Java List /ArrayList 三种遍历方法
java list三种遍历方法性能比较 学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入记录,然后遍历ArrayList,测试代码如下: pac ...
- map的三种遍历方法!
map的三种遍历方法! 集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ /* * To change this template, choose Tools | Te ...
- java list三种遍历方法性能比較
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便測试各种遍历方法的性能,測试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...
- java list三种遍历方法性能比较
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...
- List集合三种遍历方法
List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb ...
随机推荐
- Hexo High一下以及压缩排版问题
背景介绍 集成Hight一下以及Gulp-html压缩之后出现的问题: High一下功能多次点击,会创建多个Audio对象,导致同时播放多次音乐,重音.解决办法:判断是否添加Audio对象,如果存在则 ...
- kali之获取靶机的图片和看的url
需要用到 fping工具 用-asg参数 调查选项: -4,ipv4只能ping ipv4地址 -6——ipv6只在ping ipv6地址 -b——大小=字节数量的ping数据以字节的方式发送(默认为 ...
- WPF通用框架ZFS《项目结构介绍01》_模块介绍
首页介绍: 下图为项目运行首页图片, 大的结构分为三块: 1.Header首部模块(存放通知组件[全局通知.消息管理 ].扩展模块[皮肤.系统设置.关于作者.退出系统]) 2.Left左侧菜单模块(存 ...
- 用Maven创建SpringMVC项目
IDE:Eclipse Jee JDK:8 Tomcat:8 1.创建项目 File->New->Maven Project-> ->Next-> ->Next-& ...
- iOS-APP-Icon 图标启动图及名字的设置
本文讲下appIcon图标.启动图及名字的设置 icon for iOS 图标大小参照苹果官网:https://developer.apple.com/library/ios/qa/qa1686/_i ...
- AIX 5.3下创建逻辑卷、添加文件系统并挂载
首先创建逻辑卷smit lv ,这里没多大问题就不细述了. 输入要创建的逻辑卷名.所属卷组.分配多少个LP.创建在哪块磁盘上等,另外还可以设置镜像,默认是只有一份镜像的,即不做mirror. 到此LV ...
- css相关用法
1. 2. 3.offset([coordinates]) 获取匹配元素在当前视口的相对偏移. 返回的对象包含两个整型属性:top 和 left,以像素计.此方法只对可见元素有效. a.获取当前元素的 ...
- GDSOI2019划水记
Day -9 北京集训结束,飞回广州浪两天后回校. Day -2 回家休整,打麻将技术进一步提高. Day 0 前往佛山入住酒店,论被人用大床房换双人房是什么体验??(一个人住真的舒服) 待在房间背模 ...
- C# 返回分页查询的总页数
/// <summary> /// 返回分页查询操作的的总页数 /// </summary> /// <param name="count">总 ...
- Linux网卡驱动框架及制作虚拟网卡
1.概述 网卡驱动与硬件相关,主要负责收发网络的数据包,将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送,并将接收到的数据包传递给上层协议. 网卡设备与字符设备,块设备不同,网络设备驱动程序 ...