Vector在使用的时候比数组要方便得多,自从学会使用后,我基本上使用Vector代替了数组,编程效率提高了很多。在此进行简单的介绍。

vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。

和 string 对象一样,标准库将负责管理与存储元素相关的内存。我们把 vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如Sales_items 对象)的 vector。vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型。
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
为了可以使用vector,必须在你的头文件中包含下面的代码:

#include <vector>

vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:

using std::vector;
vector<int> vInts;

或者连在一起,使用全名:
std::vector<int> vInts;
建议在代码量不大,并且使用的命名空间不多的情况下,使用全局的命名域方式:using namespace std;
函数
表述
c.assign(beg,end) c.assign(n,elem)
将(beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。
传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()
传回最后一个数据,不检查这个数据是否存在。
c.begin()
传回迭代器中的第一个数据地址。
c.capacity()
返回容器中数据个数。

c.clear()

移除容器中所有数据。

c.empty()

判断容器是否为空。
c.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos)// 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end)
删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()
传回第一个数据。
get_allocator
使用构造函数返回一个拷贝。
c.insert(pos,elem)//在pos位置插入一个elem拷贝,传回新数据位置
c.insert(pos,n,elem)//在pos位置插入n个elem数据,无返回值
c.insert(pos,beg,end)//在pos位置插入在[beg,end)区间的数据。无返回值
c.max_size()
返回容器中最大数据的数量。

c.pop_back()

删除最后一个数据。

c.push_back(elem)

在尾部加入一个数据。
c.rbegin()
传回一个逆向队列的第一个数据。
c.rend()
传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num)
重新指定队列的长度。
c.reserve()
保留适当的容量。

c.size()

返回容器中实际数据的个数。
c1.swap(c2)//将c1和c2元素互换
swap(c1,c2)//同上操作。
vector<Elem> //创建一个空的vector
vector<Elem> c1(c2)//复制一个vector
vector <Elem> c(n)//创建一个vector,含有n个数据,数据均已缺省构造产生
vector <Elem> c(n,elem)//创建一个含有n个elem拷贝的vector
vector <Elem> c(beg,end)//创建一个以(beg;end)为区间的vector
c.~ vector <Elem>()//销毁所有数据,释放内存
operator[]
返回容器中指定位置的一个引用。
创建一个vector
vector容器提供了多种创建方法,下面介绍几种常用的。
创建一个Widget类型的空的vector对象:
vector<Widget> vWidgets;
创建一个包含500个Widget类型数据的vector:
vector<Widget> vWidgets(500);
创建一个包含500个Widget类型数据的vector,并且都初始化为0:
vector<Widget> vWidgets(500,Widget(0));
创建一个Widget的拷贝:
vector<Widget> vWidgetsFromAnother(vWidgets);
向vector添加一个数据
vector添加数据的缺省方法是push_back()。push_back()函数表示将数据添加到vector的尾部,并按需要来分配内存。例如:向vector<Widget>;中添加10个数据,需要如下编写代码:
for(int i= 0;i<10; i++) {
vWidgets.push_back(Widget(i));
}
获取vector中指定位置的数据
vector里面的数据是动态分配的,使用push_back()的一系列分配空间常常决定于文件或一些数据源。如果想知道vector是否为空,可以使用empty(),空返回true,否则返回false。获取vector的大小,可以使用size()。例如,如果想获取一个vector v的大小,但不知道它是否为空,或者已经包含了数据,如果为空时想设置为 -1,你可以使用下面的代码实现:
int nSize = v.empty() ? -1 : static_cast<int>(v.size());[3]
访问vector中的数据
使用两种方法来访问vector。

1、 vector::at()
2、 vector::operator[]

operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作。但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。由于operator[]容易造成一些错误,所以我们很少用它.
删除vector中的数据
vector能够非常容易地添加数据,也能很方便地取出数据,同样vector提供了erase(),pop_back(),clear()来删除数据,当删除数据时,应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。

STL的Vector介绍相关推荐

  1. c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  2. oracle erase,c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  3. STL 之vector详解

    STL之vector容器详解 vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样 ...

  4. c++容器vector介绍

    vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分 ...

  5. C++ [STL之vector模拟实现]

    本文已收录至<C++语言和高级数据结构>专栏! 作者:ARMCSKGT STL之vector模拟实现 前言 正文 空间结构 默认成员函数 构造函数 拷贝构造函数 赋值重载 析构函数 关于数 ...

  6. C++ STL之vector常用方法

    C++ STL之vector常用方法 头文件 #include<vector> 初始化方法 vector<int> v; //初始化一个int类型.size为0的vectorv ...

  7. C++STL的vector容器

    C++STL的vector容器 vector容器 vector基本概念 vector构造函数 vector赋值操作 vector容量和大小 vector插入和删除 vector数据存取 vector互 ...

  8. 6-3-1:STL之vector——vector的快速入门、常用接口

    文章目录 一:vector介绍 二:vector的常用接口 (1)构造 (2)迭代器 (3)容量操作 (4)元素访问 (5)增删查改 一:vector介绍 vector是一个可变大小数组的序列容器.和 ...

  9. vector 清空 Linux,STL容器vector基础用法小结

    STL容器vector基础用法小结根据<ACM程序设计>写的,用实例展示vector用法. 方法:push_back(), insert(), erase(), clear(), size ...

最新文章

  1. “元宇宙”数字化理解
  2. [HEOI2016TJOI2016]排序(二分+线段树)
  3. 背水一战 Windows 10 (41) - 控件(导航类): Frame
  4. aop阻止方法运行_新型AOP高级氧化高浓度COD废水处理系统介绍
  5. python opencv调用cuda_Win10使用VS2019从源码编译OpenCV 4.4 + CUDA 11.0 + Cudnn 8.0 + python3
  6. 中国象棋口诀及要领精髓
  7. rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
  8. NetscalerSSL证书的导入和link
  9. CODEVS 2102 石子归并 2
  10. codevs3044 线段树+扫描线
  11. 强引用、软引用、弱引用、虚引用、终结器引用
  12. 【二叉树初阶】前中后序遍历+层序遍历+基础习题
  13. Redis开发运维实践开发者设计规范之延迟考虑
  14. 关于晶圆介绍以及IGBT晶圆的应用
  15. Equal Sign Bridge全球业务发展运营官Glen做客Hoo社区AMA全程直播回顾
  16. 图像算法工程师面试汇总
  17. 7-14 电话聊天狂人 (25 分)
  18. GBA 开发简单入门
  19. PBOC/EMV之文件结构
  20. 开源像素贴图_Google值得信赖的硬件计划是开源,像素精确的邮政编码以及更多开源新闻...

热门文章

  1. HDU6608 Fansblog【Miller_Rabin素性测试算法+威尔逊定理】
  2. Linux下QT创建项目错误处理
  3. UVA10227 POJ2419 ZOJ1900 Forests【并查集+set】
  4. UVA10033 Interpreter【模拟】
  5. 卷积神经网络(CNN)的细节问题(滤波器的大小选择)
  6. 20 世纪 10 大算法
  7. matlab 可视化 —— imagesc、
  8. 类worksheet的paste方法无效_英雄档案——类人体
  9. python3哪个版本稳定-Python 3.9 发布稳定版本,八大特性学起来!
  10. 济南python工资一般多少-Python火到天际,可是为啥找工作这么难?