vector和string内部维护的内存会“自动增长”,以便容纳不断放入其中的元素。调用max_size()可以返回其容量的最大限制。

“自动增长”的过程如下:

(1)分配一块大小为当前容量的某个倍数的新内存。

(2)将元素从旧内存拷贝到新内存。

(3)析构旧内存中的对象。

(4)释放旧内存。

“自动增长”的过程很耗时,并且会导致所有的指针、迭代器和引用失效。所以避免频繁的内存重新分配就显得很重要。

使用成员函数reserve()可以避免因“自动增长”而造成的内存重新分配。要尽早的使用reserve,把容量设为足够大。最好在容器刚被构造出来之后就使用reserve。

vector<int> v;
v.reserve(1000);
for (int i = 1; i <= 1000; ++i)v.push_back(i);

转载于:https://www.cnblogs.com/zhuyf87/archive/2012/12/06/2804512.html

使用reserve函数避免vector和string的内存重新分配相关推荐

  1. vector的resize()和reserve()函数

    关于resize函数和reserve函数的介绍这篇博客有:https://blog.csdn.net/ma2595162349/article/details/59745204 下面来看一下vecto ...

  2. C++:vector中的resize()函数 VS reserve()函数

    http://www.cplusplus.com/reference/vector/vector/vector/ 写代码的时候无意错用了这两个函数 导致测试的时候,程序运行崩溃 发现这两个函数还是有区 ...

  3. 关于C++vector容器内使用reserve函数预留能否被覆盖的问题

    #include <iostream> #include <vector> #include <opencv2/opencv.hpp> #include <o ...

  4. vector的resize函数和reserve函数

    博客原文:C++基础篇 -- vector的resize函数和reserve函数_VampirEM_Chosen_One的博客-CSDN博客,写的特别好,谢谢原博主. 正文: 对于C++的vector ...

  5. vector和string

    我这里不是将他们的区别,主要讲使用他们时要注意的一些问题,主要体现在内存方面. C++中,我们很少使用C中的数组,使用数组就意味着承担: new一个数组以后,必须保证有delete来删除所分配的内存. ...

  6. STL标准模板库中的vector、string、deque、stack、list、set和map的详细介绍——C++学习记录01

    文章目录: 1.vector 1.1 遍历方式 1.2 构造函数 1.3 容量大小问题 1.4 插入和删除 1.5 存取值 1.6 交换两个vectot的元素 1.7 预定义存储空间 2.string ...

  7. C++ STL的reserve函数

    在阅读ceph源码过程中发现部分C++语法还是不够熟悉,特此做一下笔记. 关于STL中的reserve函数的使用 reserve()是为容器预留空间,即为当前容器设定一个空间分配的阈值,但是并不会为容 ...

  8. C++知识点4——vector与string简述

    string 使用string类必须包含头文件#include<string> string对象的初始化 1.默认初始化 string s1; 2.拷贝初始化 string s4=s1; ...

  9. reverse函数实现vector变量的翻转

    c++中reverse函数实现vector变量的翻转 Crystal_Coding 2019-10-16 20:40:49 235 收藏 最后发布:2019-10-16 20:40:49首发:2019 ...

最新文章

  1. 多目录cmake工程 CmakeLists.txt编写
  2. C#与U3D中字符串尾0
  3. 校运动会c语言程序编写,校运动会管理系统报告C语言(含完整代码)
  4. erlang精要(13)-基本语法(1)
  5. oracle并发执行max,跪求大量并发执行insert into select语句的方案
  6. 自定义字符串函数:strlen,strcat,strcpy,strcmp
  7. 苦逼了6年,我今天终于把老板开了!哼!
  8. Mysql设置binlog过期时间并自动删除
  9. 关于利用np.contour画出logistic模型决策边界(plot_decision_regions)的一点感想
  10. git 解决ahead behind分叉以及删除远端commit
  11. Anonymous Shared Memory android 匿名共享内存
  12. springboot结合mybatis连接数据库
  13. python常用标准库
  14. Java解析json数组三种情况
  15. 传统的固定思维和敏捷思维的对比
  16. 信息检索平台Terrier的使用
  17. 正面管教php_我就这样走进正面管教
  18. 《玩不够的数学:算术与几何的妙趣》:第一章 平面上的几何艺术
  19. ESB企业服务总线 --- ESB概述
  20. 文件上传绕过的一些姿势

热门文章

  1. 要学好 C 语言 / C++ ,Makefile 可少不了
  2. 四大对象是什么时候创建的?
  3. MyBatis 源码解读-typeHandlerElement()
  4. 注解配置 AOP 详解
  5. Maven的依赖管理
  6. 静态方法-应用场景和定义方式
  7. FastDFS配置手册trackerstorage
  8. redis命令-key操作
  9. mybatis-plus根据多个字段排序_Mybatis Plus学习笔记(逻辑删除/动态填充/常用插件)...
  10. java web 之间通信,【Java】Web发展中通信的方式有哪些呢?