vector(不定长数组的简单使用)

当为了解决数组没有办法自己新增加元素时,当我们访问的数字很大(比如说多维数组),为了避免内存的巨大消耗(并且是无意义的消耗),我们使用stl的vector。

vector的简单使用

vector是一个容器,为了使用vector,我们需要加上头文件#include.

vector的定义; vector< int > v; 我们定义了一个存放int类型的vecv(空的)。

vector< vector >n;        有点类似与多维数组,只不过是vector,(空的)。

vector v(n,i) 创立一个int类型的vector v,里面有n个i元素。

也可以这样操作

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<

你可能感兴趣的:(c++,容器)