C++杂谈(二)初识vector容器与迭代器
教科书中失踪的vector
很奇怪的一件事情,在当时学习C++的时候,老师并没有讲授容器的内容,当时参考的谭浩强老师的红皮C++也没有这个内容,不知为何。后来再学C++,发现容器是一个很重要的概念,在C++primer中,大量使用了vector容器,在很多在线编程网站的题目中,也使用了vector<int>取代了整形数组。同样的,教材中也没有出现迭代器。
vector比数组好在哪?
vector和数组都是存储相同类型对象的容器。vector的大小变,数组大小固定不变,所以vector更加灵活。在不确定元素个数的时候,vector更适合。当元素个数确定时,可以使用数组。对于某些情况下,数组的性能可能更好一些。
使用vector
vector是标准库类型,需要包含适当的头文件。
#include<vector>
using std::vetor;
vector是类模板而非类型,必须实例化。
vector<int>
初始化vector
vector<T> v1;//空vector
vector<T> v1(v2);//v1是v2副本
vector<T> v2=v1;//与上等价
vector<T> v3(n,val);//n个元素,都是val
vector<T> v4(n);//n个元素,执行值初始化
vector<T> v5{a,b,c,.....}//列表初始化
vector<T> v5={a,b,c,...}//遇上等价
对vector操作
大多vector操作和string很相似
v.push_back(t);//追加元素到尾端 v.size();//返回元素个数 v.empty();//返回是否是空 v[n];//下标访问 //以及 ==,!=,>,>=,<,<=
注意:
- 不能用下标添加元素
- 只能对已存在的元素进行下标操作,否则会导致缓冲区溢出(buffer overflow,用下标访问不存在的元素)
使用迭代器
迭代器iterator的作用类似于指针,对对象间接访问。获取迭代器使用begin()与end(),注意,end返回容器尾部的下一位置。
获得迭代器与迭代器类型
auto b=v.begin();//auto是c++11的新类型说明符
vector<int>::iterator it1;//it是读写的迭代器,每个容器定义了一个迭代器
vector<int>::const_iterator it2;//it2只能读,不能写
迭代器运算
*it;//返回引用
it->mem//等价(*it).mem
//也有++,--,==,!=;
//有+n,-n,+=,-=;
it1-it2;//返回类型difference_type
//有>,<,>=,<=
迭代器的作用于指针类似,操作也类型于指针。
一个使用vctor与迭代器的二分搜索
vector<int>::const_iterator binarySearch(vector<int> &arr, int target)
{
vector<int>::const_iterator begin = arr.begin();
vector<int>::const_iterator end = arr.end();
vector<int>::const_iterator mid = begin + (end - begin) / ;
while (mid != end&&*mid != target)
{
if (target < *mid)
end = mid;
else
begin = mid + ;
mid = begin + (end - begin) / ;
}
return mid;
}
ps.看到有一种说法,迭代器是一种广义指针,也是有其道理的。
C++杂谈(二)初识vector容器与迭代器的更多相关文章
- 二维vector容器读取txt坐标
template <class vector> struct HeadLocation{ vector x; vector y; }; vector<HeadLocation< ...
- STL之二:vector容器用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组. ...
- vector容器+iterator迭代器
关于vector容器的详细描述,可参考:http://www.jb51.net/article/41648.htm 关于iterator迭代器的描述,可参考http://www.cppblog.c ...
- STL学习二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- STL学习系列二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- C++STL(二)——vector容器
STL--vector容器 vector对象的概念 vector基本操作 vector对象的初始化.赋值 vector查找.替换(已在上一片 string类 博客总结过了,不再总结) vector添加 ...
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- C++(二)— STL容器的基本用法
1.vector基本操作 关于vector简单的讲就是一个动态增长的数组,里面有一个指针指向一片连续的内存空间,当空间装不下的时候会自动申请一片更大的空间(空间配置器)将原来的数据拷贝到新的空间,然后 ...
- 这么美的“vector容器”,你确定你不看吗?
内容思维导图: 一.vector基本概念: 1.功能: vector数据结构和数组非常相似,也称为单端数组. 2.vector和普通数组的区别: 不同之处在于数组是静态空间,而vector是可以动态扩 ...
随机推荐
- 阿里巴巴笔试整理系列 Session2 中级篇
1知识点储备-----2笔试题总结-----3面试经验总结 知识点储备 2014年8月29日在线笔试题:20单选(40分钟内完成)+附加题(2道编程+1道问答) 1. 通过算法生成的随机数是“伪随机” ...
- orcl的小技巧和分页
1Oracle中查看所有用户语句 select * from dba_users 1.修改用户的密码 alter user 用户名 identified by 密码; 2.如何查询stuInfo表中自 ...
- C#如何在DataGridViewCell中自定义脚本编辑器
上一篇博文探讨了如何自定义DataGridViewColumn实现一个TreeViewColumn来在DataGridView控件中显示TreeView控件,其实我们还可以继续发挥想象,自定义其他的列 ...
- 【追寻javascript高手之路02】变量、作用域知多少?
前言 本来想把这个与上篇博客写到一起的,但是考虑到是两个知识点还是分开算了,于是我们继续今天的学习吧. 基本类型与引用类型 ECMAScript的的变量有两种类型: 基本类型(值类型):简单数据段 引 ...
- Office 365 – SharePoint 2013 Online 与Office相关的应用
1.在Office 365首页,点击在PC上安装Office,如下图: 2.会下载一个安装向导程序,如下图: 3.安装Office向导,如下图: 4.安装完毕以后,发现开始菜单多出Office 201 ...
- Gradle用户指南(中文版)
http://rinvay.github.io/android/2015/03/26/Gradle-Plugin-User-Guide(Translation)/
- [Android]使用RecyclerView替代ListView(三)
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4268097.html 这次来使用RecyclerView实现Pinn ...
- iOS音频开发之`AudioStreamBasicDescription`
这个类提供了对于音频文件的描述 An audio stream is a continuous series of data that represents a sound, such as a so ...
- Android 从Gallery获取图片
本文主要介绍Android中从Gallery获取图片 设计项目布局 <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- Android源码分析之SharedPreferences
在Android的日常开发中,相信大家都用过SharedPreferences来保存用户的某些settings值.Shared Preferences 以键值对的形式存储私有的原生类型数据,这里的私有 ...