一.1容器

物理
一.1容器

用户头像
¤ 『深蓝』(ー_ー) 更新于2026-1-24 09:27:24

STL容器一般包括顺序式容器与关联式容器。

1.顺序式容器

顺序式容器包括vector,list,deque,queue,priority_queue,stack等

vector为动态数组

list为双链表

deque为双向队列

queue为队列

priority_queue为优先队列

stack为栈

2.关联式容器

set为集合

multiset为快速查找

map为一对一映射

multimap为一对多映射

导航(评论区更)

1.1.1.vector

1.1.2.栈与stack

1.1.3.队列与queue

1.1.4.优先队列与priority_queue

1.1.5.链表与list

1.1.6.set

1.1.7.map

1.2.sort()

1.3.next_permutation()

收起
8
3
共1条回复
时间正序
用户头像
¤ 『深蓝』(ー_ー)
27天前

1.1.1.vector

数组是基本数据结构,分为静态数组与动态数组两类。在算法竞赛中,能用静态数组就用静态数组,而非使用指针管理动态数组。但如果空间较为紧张,可以建立动态数组vector。

vector容器是一个模板类,能存放任何类的对象。
1.1定义

vector定义实例

定义int型数组:

1.vector〈int〉a :默认初始化,a为空

2.vector〈int〉b(a):用a定义b

3.vector〈int〉a(100):a有100个值为0的元素

4.vector〈int〉a(100,6):100个值为6的元素

定义string类数组

1.vector〈string〉a(10,“null”):10个值为null的元素

2.vector〈string〉b(a.begin(),a.end()):b是a的复制

定义结构型数组

struct point {int x,y;};

vector〈point〉a;a用来存坐标

还可以定义多维数组,如二维数组:

vector〈int〉a[MAXN];

它的第一维是固定的,第二维是动态的。


常用操作:

1.a.push_back(100);在尾部添加元素

2.int size=a.size();元素个数

3.bool isEmpty=a.empty();判断是否为空

4.cout<<a[0]<<endl;打印第一个元素

5.a.insert(a.begin()+i,k);在第i个元素前面插入k

6.a.pop_back();删除末尾元素

7.a.erase(a.begin()+i,a.begin()+j);删除区间[i,j-1]的元素

8.a.resize(n);数组大小变为n

a.clear();清空


5条评论
用户头像
不稳定-累了
26天前

写的很不错!不过有几个小问题:

1:最后a.clear()之前没有序号(可以忽略)

2:没有讲到取下标不等于0的item,即使这玩意应该是个人都会,建议将“cout<<a[0]<<endl(输出第一个元素)”改为"c=a[i](i>=0)(将a中的第(i+1)个元素赋值给c)"

3:cout后面并非一定要加endl,'\n’比这个常数更好且仍然不是必须的

用户头像
这个可以有(保佑我进省队)
26天前

补充一点,在CSP系列比赛里,一般除了队列和空间给的很小的时候用链表

我们都是建议用数组模拟一切的,因为一般SCP系列比赛限制时间限制的很死,而空间一般够用

在空间够用的时候你甚至可以干出用结构体加数组模拟链表的左右脑互搏行为

用户头像
不稳定-累了 回复 这个可以有(保佑我进省队)
26天前

但是无疑,在时间和空间上完全不如直接数组的链表,因为结构体的取值会移动整个结构体导致赋值速度变慢,卡常就老实了(SCP是啥阴,你打错了哦~)

用户头像
这个可以有(保佑我进省队) 回复 不稳定-累了
26天前

所以左右脑互搏啊,正常好人谁这么干?

数组就是最好用的啦,不要研究什么栈,直接四个函数加一个数组,超级好用

用户头像
不稳定-累了 回复 这个可以有(保佑我进省队)
26天前

嗯嗯,但是链表不是一个val,一个nxt,一个h吗