顺序容器之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 ...
随机推荐
- Warning:关于_CRT_SECURE_NO_WARNINGS
Warning 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s in ...
- (转)Bootstrap 之 Metronic 模板的学习之路 - (6)自定义和扩展
https://segmentfault.com/a/1190000006815041 前面我们将 Metronic 的结构和源码大致浏览了一遍,Metronic 整个文件包有三百多兆,在实际项目中, ...
- Elasticsearch学习(一)————简单命令
Elasticsearch一.简介**Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索.结构化检索和分析,并能将这三者结合起来.Elasticsearch 基于 Lucene ...
- PHP算法之判断是否是质数
质数的定义 质数又称素数.一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数. 实现思路 循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能 ...
- python中字符串逆序的实现
没有直接的逆序函数,有两种常用方式可将字符串逆序,一为切片,一为利用list的reverse,示例如下: #切片x=' y=x[::-1] #reverse函数 y=list(x) y.reverse ...
- 用chrony代替ntpd时间同步服务器
Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确. 它由两个程序组成:chronyd和chronyc. chronyd是一个后台运行的守护进程,用于调整内核 ...
- 使用gson进行数据(集合数据)的转换 并且返回给前端 进行动态解析 并添加
后台使用gson转换工具把list集合数据 以json字符串的方式返回给前台 解压: 加入到工程中 前台页面进行数据解析时 需要把得到的字符串 转换为object数组 -------------- ...
- Cache index coloring for virtual-address dynamic allocators
A method for managing a memory, including obtaining a number of indices and a cache line size of a c ...
- Web安全扫描工具
使用 Ibm security appscan 进行WEB安全扫描. 1.SQL注入: 2.发现内部IP泄露模式: 3.已解密的登录请求: 4.HTML注释敏感信息泄露:
- [SharePoint][SharePoint 2013从入门到精通]Chapter 1 介绍 SharePoint2013
本章你讲学到 什么是SharePoint2013 SharePoint2013如何加强协作与共享 SharePoint2013中有什么用户权限 什么是SharePoint Online 本地部署与在线 ...