顺序容器之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 ...
随机推荐
- 工欲善其事必先利其器之windows篇
Windows是我们最常用的系统,下面就让我们重新认识一下Windows有哪些可以让我们提高工作效率的快捷键以及部分技巧,,以及在外行看来可以看起来逼格高的技巧! 1.Windows最实用,最常用的快 ...
- SaltStact自动化运维工具02
Grains基础:• Grains是saltstack最重要的组件之一• 存储minion端的基本信息,这些信息一般都是静态的,如CPU.内核.操作系统等• Grains存储在minion本地• 管 ...
- Binary Agents FreeCodeCamp
function binaryAgent(str) { var arr = str.split(" "); var newStr = ""; for(var i ...
- vc++如何创建程序-构造和继承
#include<iostream.h>//定义一个动物类class Animal{public: void eat();//添加方法 { cout<<"animal ...
- 【数据分析学习】016-numpy数据结构
通常对数据的矩阵进行操作,就用numpy操作,打开txt文件 使用help()去查询文档,可以看到官方的注释 import numpy path = r'F:\数据分析专用\数据分析与机器学习\wor ...
- MySQL py模块的链接Navicat可视化工具
数据库可视化工具Navicat 1 基本操作: 1 库 表 字段 记录(增删改查) 2 添加主建,添加自增. 3 添加外键,外键的链接 4 模型建表,模型添加外键.(逆向数据库到模型,运行SQL文件 ...
- JavaScript对原始数据类型的拆装箱操作
JS中的基本类型: boolean null undefined string number symbol 每当读取一个基本类型的时候,会隐式的自动进行装箱操作(即:将一个基本类型变成对象): var ...
- C语言基础 (11) 结构体 ,共用体 枚举 typedef
1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...
- HDU 5307 He is Flying (生成函数+FFT)
题目传送门 题目大意:给你一个长度为$n$的自然数序列$a$,定义一段区间的权值为这一段区间里所有数的和,分别输出权值为$[0,\sum a_{i}]$的区间的长度之和 想到了生成函数的话,这道题并不 ...
- php 返回某个月的 每周几有几天
不得不承认,这真是一个奇葩的需求,无奈写个类凑活用用. 输入日期格式或者 时间戳,返回当月有多少个周一.周二.周三.....周日; 思路就是 找到这个月有多少天,在便利判断. 稍微考虑下闰年的情况 前 ...