教科书中失踪的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];//下标访问

//以及 ==,!=,>,>=,<,<=

注意:

  1. 不能用下标添加元素
  2. 只能对已存在的元素进行下标操作,否则会导致缓冲区溢出(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容器与迭代器的更多相关文章

  1. 二维vector容器读取txt坐标

    template <class vector> struct HeadLocation{ vector x; vector y; }; vector<HeadLocation< ...

  2. STL之二:vector容器用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组. ...

  3. vector容器+iterator迭代器

    关于vector容器的详细描述,可参考:http://www.jb51.net/article/41648.htm   关于iterator迭代器的描述,可参考http://www.cppblog.c ...

  4. STL学习二:Vector容器

    1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...

  5. STL学习系列二:Vector容器

    1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...

  6. C++STL(二)——vector容器

    STL--vector容器 vector对象的概念 vector基本操作 vector对象的初始化.赋值 vector查找.替换(已在上一片 string类 博客总结过了,不再总结) vector添加 ...

  7. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

  8. C++(二)— STL容器的基本用法

    1.vector基本操作 关于vector简单的讲就是一个动态增长的数组,里面有一个指针指向一片连续的内存空间,当空间装不下的时候会自动申请一片更大的空间(空间配置器)将原来的数据拷贝到新的空间,然后 ...

  9. 这么美的“vector容器”,你确定你不看吗?

    内容思维导图: 一.vector基本概念: 1.功能: vector数据结构和数组非常相似,也称为单端数组. 2.vector和普通数组的区别: 不同之处在于数组是静态空间,而vector是可以动态扩 ...

随机推荐

  1. First day on cnblogs,破壳日~~

    突然很想找个地方写一点文章,又想到了这个老账号:没有因长期静默被删号实在是很感动...好吧,就这样纪念一下.第一天. I suddenly wanna write something and reca ...

  2. 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛 B - 大还是小? 字符串水题

    B - 大还是小? Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Description 输入两个实数,判断第一个数大 ...

  3. 初识React Native,踩坑之旅....

    开启Genymotion Android模拟器后 1.运行“react-native run-android”报端口冲突....解决方法: 2.运行“react-native run-android” ...

  4. HBase集群安装过程中的问题集锦

    1.HRegionServer启动不正常 在namenode上执行jps,则可看到hbase启动是否正常,进程如下: [root@master bin]# jps26341 HMaster26642 ...

  5. Ionic 开发环境搭建

    android sdk环境搭建并非易事,本人经过无数失败,才使用以下方式成功 配置Ionic 开发环境 1.下载JDK并配置Java运行环境 http://www.oracle.com/technet ...

  6. 20款时尚的 WordPress 企业模板【免费主题下载】

    在这篇文章中,我们收集了20款时尚的 WordPress 企业模板.WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单 ...

  7. 值得 Web 开发人员收藏的16款 HTML5 工具

    HTML5 正在迅速改变创建和管理网站的方式.HTML5 在不同的领域让网页设计更强大的.快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5 开发各种网站和应用程序. ...

  8. 【javascript激增的思考03】MVVM与Knockout

    前言 今天搞的有点快,因为上午简单研究了下MVC,发现MVC不太适合前端开发,然后之前看几位前端前辈都推荐前端使用MVVM,但是我对其还不甚了解,所以我觉得下午还是应该先看看他是神马先,后面再决定要不 ...

  9. form中动态生成Radiobutton控件

    public partial class GetLabelFields : Form { int tableCount; public GetLabelFields(AxMapControl axma ...

  10. Linux机器24项安全合规设置

    工作的一些内容,这是中国移动集团当前linux机器安全合规标准,找了点时间将其归类,并查了一些资料,每项配置是什么意思,不仅要知其然,还要知其所以然.好记性不如烂笔头. 1.  检查FTP配置-限制用 ...