1. 定义:

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)可以认为是一个动态数组,其中一个vector中的所有对象都必须是同一种类型的。

2. 构造函数:

2.1 一般情况

  • vector vecName(); // 构造一个空vector,其中包含的对象为int类型
  • vector vecName(3); // 构造一个空vector,其中包含的对象为int类型,大小为3
  • vector vecName(3,value); // 构造一个空vector,其中包含的对象为int类型,大小为3,对象均为value
  • vector vecName = { 1, 2, 3, 4 }; // 构造一个vector,初始值为[1,2,3,4]
  • vector vecName(vecName2); // 构造一个vector,初始值为另一个vector类型的vecName2

2.2 将vec1的部分赋给vec2

  • vector::const_iterator First = vec1.begin() + 1; // 找到开始迭代器
  • vector::const_iterator Second = vec1.begin() + 4; // 找到结束迭代器
  • vector vec2(First, Second); // 将值直接初始化到vec2(需要注意包括开头,但不包括结尾,即vec2只包含vec[1]到vec[3]的元素)

2.3 二维数组构造方法

  • vector<vector > vecName(3); // 构造一个二维vector,其中一个维度为3
  • vector<vector > vecName(3,vector(4)); // 构造一个3*4 的二维vector,其中默认值为0
  • vector<vector > vecName(3, vector(4,1)); // 构造一个3*4 的二维vector,值均为1
  • vector<vector > vecName = { {1, 2, 3}, {4, 5, 6} }; // 构造一个2*3 的二维vector,并赋值

3. 增加元素:

  • vec1.push_back(x); // 在vec1的尾部添加一个元素x(注意:一般可以用emplace_back()代替,效率更高)
  • vec1.insert(iterator iter, x); // 在vec1的迭代器iter指向元素前增加一个元素x
  • vec1.insert(iterator iter, int n, x); // 在vec1的迭代器iter指向元素前增加n个元素x
  • vec1.insert(iterator iter, const_iterator first,const_iterator last); // 在vec1的迭代器iter指向元素前插入另一个相同类型向量的[first,last)间的数据

4. 删除元素:

  • vec1.pop_back(); // 删除在vec1的最后一个元素
  • vec1.clear(); // 删除vec1中所有元素
  • vec1.erase(iterator iter); // 删除vec1中迭代器指向元素
  • vec1.erase(iterator first,iterator last); // 删除vec1中[first,last)中元素

5. 使用元素:

5.1 一般使用法

  • vec1[1]; // 使用下标方式
  • vec1.at(1); // 使用at方式
  • vec1.front(); // 使用第一个元素
  • vec1.back(); // 使用最后一个元素

5.2迭代器指针使用法:

  • iterator begin(); // 返回向量头指针,指向第一个元素
vector<int>::iterator d = vec1.begin();
int d1 = *d;//vec1[0]
  • iterator end(); // 返回向量尾指针,指向向量最后一个元素的下一个位置
vector<int>::iterator e = vec1.end() - 1;
int e1 = *e;//vec1[last]`

反向迭代器,是从后往前数的,即+1代表向前数一个元素

  • reverse_iterator rbegin(); // 反向迭代器,指向最后一个元素
vector<int>::reverse_iterator f = vec1.rbegin();
int f1 = *f;//vec1[last]`
  • reverse_iterator rend(); // 反向迭代器,指向第一个元素之前的位置,也就是vector[-1]
vector<int>::reverse_iterator g = vec1.rend() - 1;
int g1 = *g;//vec1[0]

6. 判断是否为空:

  • bool empty() const:判断向量是否为空,若为空,则向量中无元素
vector<int> vec1 = { 1, 2, 3, 4, 5 };
bool i = vec1.empty();//输出:false
vector<int> vec2 = { };
bool j = vec2.empty();//输出:true

7. 大小函数:

  • unsigned int length = vec1.size()//vec1所含元素的个数

8. 使用时的注意事项:

8.1 头文件及其命名空间

#include<vector>
using namespace std;

8.2 Vector 作为函数的返回值时,

方法一:vector<int> fun1(int num);(不推荐)

方法二:bool fun1(int num, vector<int> $&$vec);(推荐)

8.3 将vec2中的内容追加到vec1的后面:

vec1.insert(vec1.end(), vec2.begin(), vec2.end());

8.4 最大最小元素及其索引:

#include<algorithm>
vector<double>::iterator biggest = max_element(begin(vec1), end(vec1));
double biggestValue = *biggest;//最大值
int biggestIndex = distance(begin(begin(vec1), biggest);//最大值索引
vector<double>::iterator smallest = min_element(begin(vec1), end(vec1));
double smallestValue = *smallest;//最大值
int smallestIndex = distance(begin(begin(vec1), smallest);//最大值索引

c++ vector用法详解的更多相关文章

  1. 【C++】vector用法详解

    转自:https://blog.csdn.net/fanyun_01/article/details/56842637#commentBox 一.简介 C++ vector类为内置数组提供了一种替代表 ...

  2. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  3. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  4. 7-set用法详解

    C++中set用法详解 转载 http://blog.csdn.net/yas12345678/article/details/52601454 C++ / set 更详细见:http://www.c ...

  5. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  6. STL string 常见用法详解

    string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...

  7. STL set 常见用法详解

    <算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...

  8. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  9. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

随机推荐

  1. CVPR2020论文解读:OCR场景文本识别

    CVPR2020论文解读:OCR场景文本识别 ABCNet:  Real-time Scene Text Spotting with Adaptive Bezier-Curve Network∗ 论文 ...

  2. Velodyne VLP-16激光雷达数据分析

    Velodyne VLP-16激光雷达数据分析 Velodyne VLP-16激光雷达保持了 Velodyne 在 LiDAR 中的突破性重要功能:实时收发数据.360 度全覆盖.3D 距离测量以及校 ...

  3. 使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

  4. 基于Linux的TCP网络聊天室

    1.实验项目名称:基于Linux的TCP网络聊天室 2.实验目的:通过TCP完成多用户群聊和私聊功能. 3.实验过程: 通过socket建立用户连接并传送用户输入的信息,分别来写客户端和服务器端,利用 ...

  5. UiPath中恢复依赖项失败的解决方法

    目录 序言 正文 什么是依赖包? 如何查看项目使用了哪些版本的依赖包? 一.项目内查看 二.查看项目的 JSON 文件 问题根源 解决方法 一.「等」字诀 二.切换网络环境(根治) 三.手动复制依赖包 ...

  6. Django基础之auth模块

    内容概要 用户认证模块auth auth模块补充 auth_user表扩展字段 内容详细 auth模块 主要是用来做用户相关的功能 注册 登录 验证 修改密码 注销 ​ 访问admin需要管理员账号 ...

  7. 浅谈lambda表达式&lt;最通俗易懂的讲解

    Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论.Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中.想想看,在Java8 ...

  8. 无需会员将有道云笔记脑图转换xmind

    我的烦恼 有道云笔记有脑图功能,我平时经常用到,之所以很少用到其他脑图工具,是因为我一直用有道云笔记写笔记.因此编辑脑图和查看脑图比较方便,但是需要将脑图导出的时候目前只支持图片和xmind,但是需要 ...

  9. 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则

    目录 系列文章 领域服务 应用服务 学习帮助 系列文章 基于ABP落地领域驱动设计-00.目录和前言 基于ABP落地领域驱动设计-01.全景图 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践 ...

  10. LevelDB学习笔记 (1):初识LevelDB

    LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...