向量vector
来源:互联网 发布:ubuntu 开启ssh服务 编辑:程序博客网 时间:2024/05/01 08:42
向量(Vector)是一个深奥的词。不过这里的向量不是数学里的向量,也不是物理里的向量。在C++中的向量,就是一个存放数据的地方,类似于一维数组和链表。
向量的性能
在第九章末尾,我们介绍了数组存储和链表存储的优缺点。数组的缺点是分配空间不灵活;链表的缺点是无法通过下标快速找到结点。然而这里介绍的向量却吸收了这两种数据结构各自的优点,综合性能较高。
向量的分配空间是会随着数据的量而变化的,如果空间不够,那么向量的空间会自动增长。类似于数组,我们也可以通过下标来访问向量中的数据元素,增快找到数据的速度。
万用的模板
在编写链表程序的时候,我们一定有这样的困惑:链表里面存储的数据类型可能是各种各样的,难道我们要为各种数据类型都写一个链表程序么?我们能不能写一个万用的链表程序呢?
在PowerPoint之类的软件中,有一种模板功能。模板提供的文档框架是基本完整的,我们只需要在一些地方填写上自己需要的内容,就是一个完整的文档。在C++中,也有这么一种模板(Template),我们只需要在使用之前填写自己需要的数据类型,就是一个完整的程序。我们把具有模板功能的类称为模板类,向量就是一个模板类。在这一节,我们只需要了解如何使用向量这个模板类。关于更多模板的知识,将在后面的章节再作介绍。
在上一节中,我们不难看出创建一个对象的方法是:
类名对象名(初始化数据);
而创建一个模板类对象的方法是:
类名<数据类型列表> 对象名(初始化数据);
即在类名之后填写数据类型,来创造一个符合自己需要的对象。
对向量的操作
同字符串一样,向量也有着自己的各种操作。下表就是向量常用的一些操作:
由于涉及迭代器(Iterator)的知识,我们无法学习向量的插入数据和删除数据操作。有兴趣的读者可以去看一下《C++ Primer》的相关章节。
下面我们用向量来解决习题9.6.2,模拟一下栈操作:(程序13.4)
#include <vector>#include <iostream>using namespace std;int main(){ vector<char> stack(0);//新建一个名为stack的存放字符数据的向量,初始元素个数为0 char temp; cout <<"请输入指令:" <<endl; do { cin >>temp; if (temp!='#') { if (temp!='$') { stack.push_back(temp);//模拟压栈操作 } else { stack.pop_back();//模拟退栈操作 } } }while (temp!='#'); for (int i=0;i<stack.size();i++) cout <<stack[i];//可以用下标访问数据元素 cout <<endl; return 0;}
运行结果:
请输入指令:
ABC
ABDHIKL
不难发现,用现成的向量来实现模拟栈的功能非常方便。我们不需要研究压栈和退栈的详细实现方法,而只需要知道何时操作就行了。
- 向量 VECTOR
- 向量Vector
- 向量vector
- 向量-Vector
- [BZOJ1278][向量vector][模拟+向量]
- 二维向量:vector<vector<int>>
- zju2109 vector向量使用
- vector 向量用法
- vector 向量容器
- vector向量用法
- 向量vector的实现
- 指针遍历vector向量
- 学习C++ -> 向量(vector)
- STL之向量(vector)
- Vector(向量容器)
- vector向量容器
- 学习C++ -> 向量(vector)
- C++ Vector 向量容器
- PCL环境搭配 (PCL1.7.2+WIN8.1+VS2015)
- 构建之法读后感
- 剖析NodeJs的事件轮询机制
- Collect View
- StringUtils中 isNotEmpty 和isNotBlank的区别
- 向量vector
- HDU4012 Paint on a Wall(BFS)
- leetcode118. Pascal's Triangle
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信
- 最新Android Studio开发NDK步骤(自动版)
- c++实验2—标准体重
- mybatis的增删查改
- 指纹拼接
- Xcode安装XAlign