顺序容器之vector
最近因为需要,在看C++ primer,哇,感觉这本书真不错,讲的细而且到位,而且大量的练习题,不愧为C++学习的经典书籍。今天看了顺序容器方面的内容,现在汇报一下:
一、什么是vector
vector是C++标准模板库(STL)提供的一个容器,说容器可能有点抽象。简单点吧,学习C++我们都知道C++引入的一个最大的编程上的变化就是加入了面向对象的编程技术,表现在代码的编写上也就是增加了一个类,所以C++在刚提出来的时候是叫做 C WITH CLASS的。扯远了,回来吧。vector就是一个类,提供了一组依附于该类的操作函数。这样一来,我们在写代码的时候就可以调用这些函数为我们的项目服务,这样就省去了我们很多事情(STL,standard template library正是为此而设计的,关于STL,请参考http://en.wikipedia.org/wiki/Standard_Template_Library)
二、vector的使用
明白了vector是什么了,那么我们就想知道vector怎么用,下面就给大家介绍一下Vector的用法。
vector定义在STL中的vector头文件中,我们要使用vector,必须要把vector头文件括进来,即:
#include<vector>,这是第一步,然后我们就可以开始使用vector提供的各种操作了。vector提供操作如下:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
构造函数:创建一个vector对象,功能相当于C语言中定义一个变量
vector<Elem> c; //创建一个空的vector对象,就相当于定义了一个int整形变量,没给赋值
vector<Elem> c1(c2);//c2为一个vector对象,用它来创建c1,相当于int i=j;j已经定义
vector<Elem> c(n);//创建一个vector容器,容量为n,即c里面可以放n个Elem类型的元素
vector<Elem> c(n,data);//创建一个vector,容量为n,n个元素的值都为data
vector<Elem> c(c1.begin(),c1.end());//相当于c=c1,c1调用两个函数返回的是一种新的数据类型:迭代器,有关迭代器,请参考:http://baike.baidu.com/view/1413849.htm
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
############################################################################################################
常见操作:
assign(first,last):用迭代器first,last所指定的元素取代向量元素
assign(num,val):用val的num份副本取代向量元素
at(n):等价于[]运算符,返回向量中位置n的元素,因其有越界检查,故比[]索引访问安全
front():返回向量中第一个元素的引用
back():返回向量中最后一个元素的引用
begin():返回向量中第一个元素的迭代器
end():返回向量中最后一个元素的下一个迭代器(仅作结束游标,不可解引用)
max_size():返回向量类型的最大容量(2^30-1=0x3FFFFFFF)
capacity():返回向量当前开辟的空间大小(<= max_size,与向量的动态内存分配策略相关)
size():返回向量中现有元素的个数(<=capacity)
clear():删除向量中所有元素
empty():如果向量为空,返回真
erase(start,end):删除迭代器start end所指定范围内的元素
erase(i):删除迭代器i所指向的元素
erase()返回指向删除的最后一个元素的下一位置的迭代器
insert(i,x);把x插入到迭代器i所指定的位置之前
insert(i,n,x):把x的n份副本插入到迭代器i所指定的位置之前
insert(i,start,end):把迭代器start和end所指定的范围内的值插入到迭代器i所指定的位置之前
push_back(x):把x推入(插入)到向量的尾部
pop_back():弹出(删除)向量最后一个元素
rbegin():返回一个反向迭代器,该迭代器指向的元素越过了向量中的最后一个元素
rend():返回一个反向迭代器,该迭代器指向向量中第一个元素
reverse():反转元素顺序
resize(n,x):把向量的大小改为n,新元素的初值赋为x
swap(vectorref):交换2个向量的内容
#############################################################################################
操作符重载函数:
operator()//返回容器中指定位置的元素,有关操作符重载函数请参考:http://baike.baidu.com/view/1033032.htm
析构函数:
~vector()//用于销毁vector对象占用的系统资源,更详细的析构函数介绍,请参考http://baike.baidu.com/view/1277985.htm
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
三、more about vector
1、vector是一种类似于数组的数据结构,确切的说应该是动态数组。在进行内存分配的时候必须是连续的一整块空间
2、我们知道数组是有固定长度,而vector没有,这也是我们称之为动态数组的原因。那么vector是怎么实现动态数组的呢,例如申请一个vector<int> vec(10);一个
空间大小为10的vector,那么当里面存满了10个元素了怎么办呢。办法是:重新分配一块更大的空间比如20,然后把10个数据拷贝过去,释放前面申请的10个元素的
空间
3、除此之外,在操作上他的很多特性跟数组一样,如上面的介绍,大家可以一一试一下
4、在vector中做insert操作,效率很低,除了在末尾插入以外。因为vector是连续的,每次插入一个,插入位置后面的元素都要向后移动,这样效率很低。所以vector不支持push_front操作。
5、删除操作同样效率很低
6、push_back操作很方便,有可能效率很低。
顺序容器之vector的更多相关文章
- C++顺序容器之deque初探
C++顺序容器之deque初探 deque是双端队列,与vector非常相似,是顺序容器,不同的是,deque可以在数组开头和末尾插入和删除数据.支持快速随机访问. #include<iostr ...
- C++顺序容器之list初探
C++顺序容器之list初探 双向链表,支持双向顺序访问.在list中任何位置进行插入和删除速度都很快. list不支持随机访问,为了访问一个元素,必须遍历整个容器. #include<iost ...
- [知识点]C++中STL容器之vector
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...
- C++容器之Vector
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vect ...
- C++ 序列式容器之vector
什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
- C++STL模板库序列容器之vector
目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...
- ACM__容器之vector
今天做题碰到了深搜的题,有一种存图方式需要用到vector,对vector不是很熟悉,回顾了一下 vector都知道是一个容器,但并不准确,它是一个多功能的能够操作多种数据结构和算法的模板类和函数库. ...
- 容器之vector
#include <iostream> #include <vector> #include <string.h> #include <algorithm&g ...
随机推荐
- JavaScript Math 对象常用方法
Math.abs(x):可返回数的绝对值 Math.ceil(x):向上取整 Math.floor(x):向下取整 Math.max(x,y):最大值 Math.min(x,y):最小值 Math.r ...
- Centos7 单节点安装 FastDFS + FastDHT服务
Centos7 单节点安装 FastDFS + FastDHT服务 1.安装gcc(编译时需要) FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果 ...
- 洛谷P1563 玩具谜题 简单模拟
没意义,注意方向别判错. Code: #include<cstdio> #include<cstring> using namespace std; const int max ...
- 路飞学城Python-Day180
部署作业 [pythonanywhere]
- 数据结构(5) 第五天 快速排序、归并排序、堆排序、高级数据结构介绍:平衡二叉树、红黑树、B/B+树
01 上次课程回顾 希尔排序 又叫减少增量排序 increasement = increasement / 3 + 1 02 快速排序思想 思想: 分治法 + 挖坑填数 分治法: 大问题分解成各个小问 ...
- XSS Chanllenges 11-15
Stage #11 根据提示,发现正则匹配,过滤掉了很多关键字 除on 事件和script 事件外,能执行js 代码的还有a 标签构造的超链接 构造 "><a href=java ...
- [luogu4053 JSOI2007] 建筑抢修 (贪心 优先队列)
传送门 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤 ...
- MySQL Query Cache 相关的问题
最近经常有人问我 MySQL Query Cache 相关的问题,就整理一点 MySQL Query Cache 的内容,以供参考. 顾名思义,MySQL Query Cache 就是用来缓存和 Qu ...
- CF787A - The Monster
/* CF787A - The Monster http://codeforces.com/contest/787/problem/A 数学 扩展欧几里得 注意x或y为0的时候要特判 并且结果要大于b ...
- php 文件夹 与 文件目录操作
php文件夹操作函数 string basename ( string path [, string suffix] )给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是 ...