关于C++中STL的简单入门(updating)

发布时间 2023-11-07 21:06:54作者: NexusXian

前言:本篇文章将对STL(标准模板库)进行一个简单的介绍,以方便在算法竞赛中节省时间并方便使用。

C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。

C++ 标准模板库的核心包括以下三个组件:
1.容器(Containers)容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
2.算法(Algorithms)算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
3.迭代器(iterators)迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。

正文

  • 1.vector(向量)
    与数组类似,都是用来储存元素的一个容器,不同于数组需要定义元组大小,vector在需要进行扩充空间时自动对数据空间进行扩充,类似于golang里面的切片概念。
    使用vector 需要使用头文件.
    对向量的定义是很简单的,只需要
vector <T> name;//这里的T表示数据类型,name表示向量的名称。

对于vector的访问,有两种方式,一是通过传统的下标访问,与元组类似,从下标0开始访问。另外一种是迭代器来访问,两种访问方式我将在下面介绍

下标访问

for (int i =0;i<n;i++) cout<<name[i]<<" ";

迭代器访问

vector<int>::iterator it=vi.begin();
*(it+i);
for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
	printf("%d ",*it);
//倒序访问
for(auto it=vi.end()-1;it>=vi.begin();it--)
	printf("%d ",*it);

对于vector,有很多实用的函数可以直接使用,我在下面直接列出来
1.push_back()

在vector后面添加一个元素。当添加的元素同样是vector时,可以用以下方式表示:

vector<vector<int>> res;
res.push_back({left, right})

2.pop_back()

删除vector的尾元素。

3.size()

获得元素个数

4.clear()

清空vector中的元素

5.insert()

insert(it,x)向vector任意迭代器it前插入一个元素x.

6.erase()

erase(it)删除迭代器为it处的元素

erase(first,last)删除[first,last)内的所有元素。

需要注意的是所有erase的做法会使得iterator无效,除非删除的元素在首尾。

7.resize()

定义好后设置size,如v.resize(n+1)

8.back()

直接得到最后一个元素,可以不用写nums[nums.size()-1]
最后对于vector,万能头<bits/stdc++.h>当中已经包含了相关头文件。