leetcode中的vector常见用法

栏目: 编程工具 · 发布时间: 5年前

内容简介:我对vector的认识就是C++提供的包装好的数组,即本vector用法说明由于只是针对leetcode刷题所写的常用用法,所以内容可能比较简略,只是vector的部分内容。虽然leetcode上自动包含了所有头文件,但是如果自己编程使用vector要加上头文件

vector介绍

我对vector的认识就是C++提供的包装好的数组,即 对象的集合 ,一般来说,刷题过程中普通数组都可以用vector来代替,毕竟vector有很对简单用法并且不用考虑长度问题。因为是基础用法部分,就不深究vector和数组的区别以及vector的特性了,直接进入使用吧

本vector用法说明由于只是针对leetcode刷题所写的常用用法,所以内容可能比较简略,只是vector的部分内容。

声明

虽然leetcode上自动包含了所有头文件,但是如果自己编程使用vector要加上头文件

#include <vector>
再加上using namespace std;
或者
using std::vector;

创建,复制

vector<int> a;        //创建一个空的vector
vector<int> a(n);     //创建一个含有n个对象的vector,
                      //此时数据已缺省构造产生,比如现在的数组里全是0
vector<int> a(n, elem);//创建一个含有n个elem拷贝的vector

vector<int> a1(a2);   //复制一个vector
vector<int> a1(begin, end); //这里的begin和end可以是另一个vector的迭代器
                          //会将[begin,end)范围内的数据复制过来

关于最后一个用法有一个小坑可以注意一下,假设a2是一个含有4个int数据的vector,

如果你是这样用的:vector<int> a1(a2.begin(), a2.begin()+3),那么a1中实际有3个对象;

但如果你是这样用的:vector<int> a1(a2.begin(), a2.end()),那么a1中实际有4个对象。

这是因为a2.end()实际上指向的 并不是vector最后一个对象,而是最后一个对象的下一个位置。

一般来说,leetcode刷题过程中都不用手动释放vector内存,所以我也就不写了

访问数据

a.begin()        返回指向首个对象的指针,也就是一般所说的迭代器
a.end()          返回指向最后一个对象的下一个位置的指针
a.begin()+1      返回指向首个对象的下一个对象的指针
a.end()-1        返回返回指向最后一个对象的指针

a.rbegin()       返回指向最后一个对象的指针,反向迭代器
a.rend()         返回指向首个对象的前一个位置的指针,反向迭代器

迭代器我个人觉得一开始不用深究,只需要知道他们是指向vector对象的指针即可

反向迭代器很容易搞混。。可以不用,如果用的话要记住, rend和end分别在vector的两头

a.front()        返回首个对象的数据,和*a.begin()是一样的
a.back()         返回最后一个对象的数据
a.at(i)          返回编号i位置处的对象数据,会检查数据是否存在
a[i]             返回编号i位置处的对象数据

这里建议大家尽量使用a.at(i)来返回数据,因为会检查数据是否存在

插入

a.push_back(i);            //最简单的插入,直接向vector末尾加入一个数据
a.insert(pos,elem);        //向pos迭代器指向的对象前插入一个对象,注意是对象前
a.insert(pos, n, elem);    //向pos迭代器指向的对象前插入n个相同对象
a.insert(pos, begin, end); //向pos迭代器指向的对象前插入[begin,end)之间的对象

后三个函数都会返回新数据的位置

删除

a.clear();                 //删除所有对象
a.pop_back();              //删除最后一个对象
a.erase(pos);              //删除pos迭代器对应的对象
a.erase(begin, end);       //删除[begin,end)之间的对象

后两个函数会返回被删除数据的 下一个 位置

赋值

a[1] = 1;            //令编号1的对象数据为1
a.assign(1, 1);      //令a为{1}
a.assign(begin,end); //把另一个迭代器[begin,end)中的数据赋值给a

要注意第一行和第二行结果是完全不同的,assign函数有点类似复制函数,是对整体的操作

其它常用函数

a.size()        返回vector中元素的个数
a.empty()       返回vector是否为空,空返回1,不为空返回0
a1.swap(a2);     //交换a1,a2数据
swap(a1, a2);    //交换a1,a2数据,同上
swap(a1[1], a1[2]);    //交换a1的第2个数据和第3个数据

注意,是没有a1[1].swap(a1[2])这种用法的

总结

本文主要介绍了vector的以下内容:

  • 创建,复制
  • 数据访问
  • 插入,复制,删除
  • 常用函数

    • size()
    • empty()
    • swap()

以上所述就是小编给大家介绍的《leetcode中的vector常见用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入剖析Tomcat

深入剖析Tomcat

Budi Kurniawan、Paul Deck / 曹旭东 / 机械工业出版社华章公司 / 2011-12-31 / 59.00元

本书深入剖析Tomcat 4和Tomcat 5中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发Tomcat组件,或者扩展已有的组件。 Tomcat是目前比较流行的Web服务器之一。作为一个开源和小型的轻量级应用服务器,Tomcat 易于使用,便于部署,但Tomcat本身是一个非常复杂的系统,包含了很多功能模块。这些功能模块构成了Tomcat的核心结构。本书从最基本的HTTP请求开......一起来看看 《深入剖析Tomcat》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换