浅谈STL之Vector

前言

这一系列文章是给像我一样的小白们使用的,也欢迎各位dalao指正错误。

这个系列预计要出三章,这一章是本系列的第一章。

一、什么是STL

STL是Standard Template Library(标准模版库)的缩写,在该库中,包含着大量的预设容器、算法和迭代器,是一个可以简化编程难度和降低时间的好东西,有以下的优点。

1. 高性能:STL容器和算法经过高度优化,提供了出色的性能,适用于各种应用场景。

2.可复用性:STL代码具有高度的可复用性,可以在不同项目中重复使用,从而提高开发效率。

3. 可移植性:STL是C++的标准组成部分,因此在不同的C++编译器和平台上都可以使用。

4. 丰富的功能:STL提供了各种容器和算法,适用于不同类型的问题,从数据存储到算法处理。[1]

二、STL中的Vector

这一部分是本文重点的部分。

1.什么是Vector

Vector可以理解为一个内存连续,没有长度限制(长度可变化),提供了线性的插入和删除操作,以及常数复杂度的随机访问的数据结构(列表)。[2]

经过上面这段,你是不是觉得这和数组很相似?其实可以抽象的这样理解。

2.我们为什么要用Vector

Vector因为他出色的动态分配内存和长度的可变化而被应用,最主要的一点是因为其丰富的内部函数让其可以降低码农的掉发量 简化程序的码量。

3.Vector详解

请注意,在使用vector前要引用对应的头文件并使用std命名空间:

#include

vector中有许多函数,大致可以分为如下几类:

迭代器,与长度相关的函数,与容量相关的函数和对元素增删及修改的函数[2]

3.1迭代器

        1.begin():返回指向第一个元素的迭代器(位置)        

         2.end():返回指尾端占位符的迭代器,注意是没有元素的,在调用时要注意,否则可能会RE

         此外,还有rend(),cbegin(),rbegin(),cend()这几个函数,因为不太常用,所以在此不做讲解。

3.2与长度相关的函数

empty() 返回一个 bool 值,即 v.begin() == v.end()true 为空,false 为非空。

size() 返回容器长度(元素数量),即 std::distance(v.begin(), v.end())

resize() 改变 vector 的长度,多退少补。补充元素可以由参数指定。

max_size() 返回容器的最大可能长度。

3.3与容量相关的函数

好吧,说实话不太常用,有兴趣的可以去这里了解

 3.4对元素增删及修改的函数

clear()清除所有元素

insert() 支持在某个迭代器位置插入元素、可以插入多个。线性复杂度

erase() 删除某个迭代器或者区间的元素,返回最后被删除的迭代器。线性复杂度

push_back() 在末尾插入一个元素,均摊复杂度为 常数,最坏为线性复杂度

pop_back() 删除末尾元素,常数复杂度

4.Vector的劣势

1.扩容有消耗,还存在一定的空间浪费。

 扩容的时候,会将原本的空间丢弃,然后开辟出一块新的空间,这样就会造成计算机额外的耗。

2.喜闻乐见的大常数

虽然没什么影响,大纲上也没有卡常这一项,但是当你数据很极限时用vector可能会TLE,慎用

三、参考

【1】:C++标准库详解:STL容器和算法

【2】:OI WIKI

你可能感兴趣的:(STL,c++,数据结构,算法)