Effective STL 条款14

2024-05-29 04:18
文章标签 14 stl effective 条款

本文主要是介绍Effective STL 条款14,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用reserve来避免不必要的重新分配

本节讲解reserve操作的优势,以及重新分配的代价

先来讲一下重新分配的代价:
1.分配新的内存块,一般vector和string是成倍增加内存

2.把所有元素从容器的旧内存拷贝到它的新内存

3.销毁旧内存对象

4.回收旧内存

可以看出,重新分配内存的操作是非常耗时的。

接着,解释一下以下几个迭代器函数的功能:

1.size告诉你容器中有多少元素

2.capacity告诉你容器中最多能容纳多少元素

3.resize函数强制把容器容量改为容纳n个元素,如果n小于当前size返回大小,容器尾部的元素会被销毁。如果n大于当前size大小,新默认的元素会添加到容器尾部。如果n大于当前capacity,在元素加入之前发生重新分配

4.reserve强制容器的容量改为至少n,如果n小于当前容量,vector忽略,n大于就重新分配内存。

最后,比较下面两个代码:
代码1:

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

代码2:

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

代码1会导致2到10次重新分配
代码2不会导致重新分配

为了提高程序执行速度,避免容器内存重新分配很重要!

这篇关于Effective STL 条款14的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012625

相关文章

C++标准模板库STL介绍

STL的六大组成部分 STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,提供了丰富的通用数据结构和算法,使得 C++ 编程变得更加高效和方便。STL 包括了 6 大类组件,分别是算法(Algorithm)、容器(Container)、空间分配器(Allocator)、迭代器(Iterator)、函数对象(Functor)、适配器(Adapter)

【大数据 复习】第11,12,13,14章

Web应用与流数据 1.在Web应用、网络监控、传感监测等领域,兴起了一种新的数据密集型应用——静态数据,即数据以大量、快速、时变的流形式持续到达。( )    正确答案: 错误 错误在静态数据,这里应该叫非静态数据之类的,虽然没有这个名词。 2.流数据适合采用批量计算,因为流数据适合用传统的关系模型建模。( )    正确答案: 错误 传统的关系模型一般是用于静态数据的存储和分析,例如 S

STL迭代器的基础应用

STL迭代器的应用 迭代器的定义方法: 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭代器以只读方式逆序遍历STL容器容器类名::const_reverse_iterato

C++初学者指南第一步---14.函数调用机制

C++初学者指南第一步—14.函数调用机制 文章目录 C++初学者指南第一步---14.函数调用机制1.记住:内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住:内存的结构 堆(自由存储) 用于动态存储期对象,例如 std::vector 的内容。空间大,可以用于大容量存储(大多数用于主内存)。可以根据需要分配

如何使用STL中的模板类

在C++中,标准模板库(STL)提供了大量的模板类,这些类可以处理各种类型的数据,从而极大地提高了代码的复用性和灵活性。要使用STL中的模板类,你需要遵循一些基本的步骤和约定。 以下是一些使用STL模板类的基本步骤: 包含头文件: 首先,你需要包含相应的STL头文件,以便能够使用其中的模板类。例如,要使用std::vector,你需要包含<vector>头文件。 cpp复制代码 #incl

AI大模型企业应用实战(14)-langchain的Embedding

1 安装依赖 ! pip install --upgrade langchain! pip install --upgrade openai==0.27.8! pip install -U langchain-openai ! pip show openai! pip show langchain! pip show langchain-openai 2 Embed_document

C++STL 初阶(5)vector的简易实现(上)

不同于string只实现一个最简单的版本,vector在此处我们要实现的是模版类,类模版的声明和定义分离非常不方便(会在链接时报错),所以我们都只在一个vector.h下去实现声明和定义。后续我们提及到的库里面实现的vector也是只有.h,没有.cpp      不过库中会将短的函数放在类里,如size、begin等(直接作为inline函数),大的如insert_aux就会放在

家政预约小程序14权限配置

目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了,小程序开发好之后需要给运营人员提供管理后台,要分配账号、配置权限,我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中,用户分为内部用户和外部用户。内部用户是可以由超管进行创建,在创建的时候要占用内部用户的授权数,每分配一个用户就会消耗一张证书。 而外部用户目前没有限制,外部

第13关:存储过程1、第14关:存储过程2。(2021数据库期末一)

目录 首先需要学习和了解的知识 第13关:存储过程1 任务描述 答案  第14关:存储过程2 任务描述 答案 本篇博客的答案博主是学习别人得来的,敢于借鉴和学习哈哈!! 首先需要学习和了解的知识 了解什么是存储过程以及存储过程的基本语法。(作者博客专栏或者b站学习)了解在命令行中,执行创建存储过程的SQL时。需要通过关键字 delimiter 指定SQL语句的结束

source配置文件不生效 原创 2016年03月14日 18:43:55 3558 问题背景: 升级jdk 1.8之后,启动时报版本编译问题,查看$JAVA_HOME,$JRE_HOME

source配置文件不生效 原创  2016年03月14日 18:43:55 3558 问题背景:       升级jdk 1.8之后,启动时报版本编译问题,查看$JAVA_HOME,$JRE_HOME,没有问题。      初步推断是没有source,sourec .bashrc 之后查看$JAVA_HOME,$JRE_HOME变成1.8版本,但启动时还是报错,这就