开vector时要注意内存容易炸

最好的办法就是在开vector之后,对他进行一步操作

vector<int> a;
a.resize(n);

n就是你要开的数组的大小,此时数组里已经插入了n个零,占内存空间也只有n个int

还有另外一种方法

vector<int> a;
a.reserve(n);

这个就是关于内存的事了,此时我们已经将这个动态数组的大小固定了,就是说,它已经变成了一个普通的数组,只不过可以开的大一些

但是,这个时候vector内的下标是不可以直接调用的,因为这里只是控制了空间大小,而每一个下标内是没有值的

这里有两种办法,一个就是上面的resize()还有就是暴力插0

vector<int> a;
for(int i=1;i<n;i++)
a.push_back(0);

不过这样写应该比第一种要慢一些

第一种的时间及内存

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
ll n;
vector<int> a;
int b[100000000];
signed main(){
n=5e8;
cout<<n/1024/1024<<endl;
a.reserve(n+10);
a.resize(n);
//for(re i=1;i<=n;i++)a.push_back(0);
cout<<a.max_size()<<endl<<a.capacity()<<endl;
} 476
1073741823
500000010 real 0m1.079s
user 0m0.916s
sys 0m0.160s

第二种的时间及内存

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
ll n;
vector<int> a;
int b[100000000];
signed main(){
n=5e8;
cout<<n/1024/1024<<endl;
a.reserve(n+10);
//a.resize(n);
for(re i=1;i<=n;i++)a.push_back(0);
cout<<a.max_size()<<endl<<a.capacity()<<endl;
} 476
1073741823
500000010 real 0m6.116s
user 0m6.000s
sys 0m0.116s

可以清晰的看到下面那个炸了

为什么要说这些呢

因为,vector在内部开空间的时候,是在2的指数级上开的空间

就是如果空间不够了,他会直接把你用的空间*2

然后直接炸掉你的空间,然后导致你暴零

所以我们在利用vector做题时,最好限制一下它的空间,可以让内存保持在一个可控的范围内

还有时间问题,注意resize比直接插入快。。。。

我也不知道为什么我的电脑之让我把数组开到5e8

而别人的电脑都可以开到2305843009213693951

害noi_linux欺负人

STL----vector注意事项的更多相关文章

  1. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  2. STL vector

    STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...

  3. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  4. STL vector+sort排序和multiset/multimap排序比较

    由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...

  5. STL vector 用法介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  6. STL vector使用方法介绍

    介绍 这篇文章的目的是为了介绍std::vector,怎样恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  7. stl——vector详解

    stl——vector详解 stl——vector是应用最广泛的一种容器,类似于array,都将数据存储于连续空间中,支持随机访问.相对于array,vector对空间应用十分方便.高效,迭代器使ve ...

  8. C++STL vector详解(杂谈)

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  9. C++ stl vector介绍

    转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...

  10. 浅谈C++ STL vector 容器

    浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...

随机推荐

  1. Azure Storage 利用 azCopy 复制迁移数据

    一,引言 前两天遇到了Azure Blob Storage 需要迁移到另外的一个 Azure Blob Storage 中.手动下载.上传已经无法满足了,得另寻一种方式了 AzCopy.Azure 为 ...

  2. react+antd 使用脚手架动态修改主题色

    最近做了一个需求,后台管理系统添加一个可以动态修改ant-design主题色.查询了大多数的文章,发现基本都是抄来抄去,而且文章记录的也一点也不详细.刚刚把这个功能做完了,顺便记录一下如何去修改主题色 ...

  3. 详解Redis中两种持久化机制RDB和AOF

    redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Ap ...

  4. 真正的原生JS数据双向绑定(实时同步)

    真正的原生JS数据双向绑定(实时同步) 接触过vue之后我感觉数据双向绑定实在是太好用了,然后就想着到底是什么原理,今天在简书上看到了一位老师的文章 js实现数据双向绑定 然后写出了我自己的代码 wi ...

  5. Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 实现日志的自动采集、搜索和分析

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据 ...

  6. [c++] 开发问题

    语言中的很多细节都是为了应对实际开发中会遇到的问题 当编写程序时,我们使用的定义多数不是自己写的,如sqrt(),是很多年前别人写的,我们只是使用它们 在C++中,对于"别处"定义 ...

  7. Linux服务之DHCP服务篇(scp)

    一.概念 名称:DHCP----Dynamic Host Configuration Protocol 动态主机配置协议 功能:DHCP是一个局域网的网络协议,使用UDP协议工作 主要用途:给内部网络 ...

  8. Lombok 插件安装和使用

    引言 以前的 Java 项目中,充斥着太多毫无技术含量的代码,比如类属性的 getter/setter/toString 方法,还有就是异常处理.I/O 流的关闭操作等.这些样板代码虽然可以通过 ID ...

  9. linux 系统监控命令之 top-(转自 Howie的专栏)

    top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的 ...

  10. downloader middleware的三个methods不同返回的情况

    要激活一个meddleware, 要在设置里面添加.例如: DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomDownloaderMidd ...