当为了解决数组没有办法自己新增加元素时,当我们访问的数字很大(比如说多维数组),为了避免内存的巨大消耗(并且是无意义的消耗),我们使用stl的vector。
vector的简单使用
vector是一个容器,为了使用vector,我们需要加上头文件#include
vector的定义; vector< int > v; 我们定义了一个存放int类型的vecv(空的)。
vector< vector
vector
也可以这样操作
vector<结构体> a;
sort(a,a+n,cmp);
来进行关于结构体数组的存放和快排,但是要自己写一个cmp.可以适用于不是当一排序的结构数组。
v.size() 容器的大小。
v.push_back(q) 往容器尾端里面添加q元素。
v.resize(n,i)
分两种,当v的大小比n大时候,删去(v.size()-n)个元素
else 添加(n-v.size())个i;
使用下表访问或着赋值 v[2]=k;
也使用迭代器来访问(一般不是很建议)
刚开始的时候自己也不是很可以理解vector的使用,但是直到遇到了这道题
超市里有 n(n\le10^5)n(n≤105) 个寄包柜。每个寄包柜格子数量不一,第 ii 个寄包柜有 a_i(a_i\le10^5)ai(ai≤105) 个格子,不过我们并不知道各个 a_iai 的值。对于每个寄包柜,格子编号从 1 开始,一直到 a_iai。现在有 q(q\le10^5)q(q≤105) 次操作:
1 i j k
:在第 ii 个柜子的第 jj 个格子存入物品 k(0\le k\le 10^9)k(0≤k≤109)。当 k=0k=0 时说明清空该格子。2 i j
:查询第 ii 个柜子的第 jj 个格子中的物品是什么,保证查询的柜子有存过东西。已知超市里共计不会超过 10^7107 个寄包格子,a_iai 是确定然而未知的,但是保证一定不小于该柜子存物品请求的格子编号的最大值。当然也有可能某些寄包柜中一个格子都没有。
第一行 2 个整数 n 和 q,寄包柜个数和询问次数。
接下来 q 个整数,表示一次操作。
对于查询操作时,输出答案。
输入 #1复制
5 4 1 3 10000 114514 1 1 1 1 2 3 10000 2 1 1
输出 #1复制
114514 1
我发现假设要是使用数组的话我要开10^5*10^5,就单单是int类型的话,大概空间都需要十几个g。这肯定是超空间的,同时作为一名程序员,我觉得浪费空间和卡时间都是很傻逼的行为。又是我就使用强大的stl中的vector。题目出自洛谷P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
随便分享一下自己的题解(这道题用map也可以,但是我建议是先学vector在学set最后学map)
这题也可以使用结构体去解,但是有强大的stl为什么不用呢?嘻嘻,分享到这里啦,下次再见啦
#include
#include
using namespace std;
int n,q,a,i,j,k;
int main()
{
cin>>n>>q;
vector< vector > v(n+1);
while(q--)
{
cin>>a;
if(a==1)
{
cin>>i>>j>>k;
if(v[i].size()>i>>j;
cout<