当前位置: 首页 > article >正文

vector容器---性能优化

目录

一、引言

二、vector容器概述

   1.定义与特性

   2.头文件

三、vector容器常用操作

   1.创建vector容器

   2.添加元素

   3.访问元素

   4.删除元素

   5.容器大小和容量

四、vector容器使用技巧

   1.预分配空间

   2.使用emplace系列函数

   3.删除元素时避免内存泄漏

五、性能优化

   1.尽量减少扩容次数

   2.避免使用 reserve() 后的 resize()

   3.使用swap()优化内存使用

六、总结


        本文将详细介绍C++中vector容器的特性、常用操作、使用技巧以及性能优化方法,帮助读者更深入地理解和运用这一强大的STL容器。

一、引言

        C++ vector容器是STL(标准模板库)的重要组成部分,它提供了一种动态数组的数据结构,使得在程序运行过程中可以方便地添加、删除和访问元素。本文将带领大家深入了解vector容器的方方面面。

二、vector容器概述

   1.定义与特性

        vector容器是一个模板类,可以存储任意类型的元素。其主要特性如下

  •  扩容:容器大小可根据需要自动调整。
  • 随机访问:支持通过下标快速访问元素。
  • 连续存储:元素在内存中连续存储,提高缓存命中率。

   2.头文件

        使用vector容器需要包含头文件。

#include <vector>
using namespace std;

三、vector容器常用操作

   1.创建vector容器

vector<int> vec;  // 创建一个空的vector容器
vector<int> vec1(10);  // 创建一个包含10个元素的vector容器,元素默认值为0
vector<int> vec2(10, 1);  // 创建一个包含10个元素的vector容器,元素初始值为1

   2.添加元素

vec.push_back(1);  // 在容器末尾添加元素1
vec.insert(vec.begin() + 1, 2);  // 在下标为1的位置插入元素2

   3.访问元素

int a = vec[0];  // 访问下标为0的元素
int b = vec.at(1);  // 访问下标为1的元素,带越界检查

   4.删除元素

vec.pop_back();  // 删除容器末尾的元素
vec.erase(vec.begin() + 1);  // 删除下标为1的元素

   5.容器大小和容量

int size = vec.size();  // 获取容器中元素的数量
int capacity = vec.capacity();  // 获取容器的容量

四、vector容器使用技巧

   1.预分配空间

        在向vector容器添加大量元素时,预分配足够的空间可以减少内存分配次数,提高性能。

vector<int> vec;
vec.reserve(1000);  // 预分配1000个元素的空间

   2.使用emplace系列函数

        emplace系列函数可以在容器中直接构造元素,避免额外的复制或移动操作。

vec.emplace_back(1);  // 在容器末尾构造元素1
vec.emplace(vec.begin() + 1, 2);  // 在下标为1的位置构造元素2

   3.删除元素时避免内存泄漏

        删除vector容器中的元素时,可以使用erase-remove惯用法,避免内存泄漏。

vec.erase(remove(vec.begin(), vec.end(), 1), vec.end());  // 删除容器中所有值为1的元素

五、性能优化

   1.尽量减少扩容次数

        预分配空间、使用resize()等方法可以减少扩容次数,提高性能。

   2.避免使用 reserve() 后的 resize()

        在调用reserve()后,避免使用resize(),因为resize()会将容器大小调整为指定值,可能导致不必要的内存分配。

   3.使用swap()优化内存使用

        当vector容器不再需要时,可以使用swap()技巧释放内存。

vector<int>().swap(vec);  // 释放vec占用的内存

六、总结

        本文详细介绍了C++中vector容器的用法、技巧与性能优化方法。掌握vector容器,可以让我们在编程过程中更加得心应手。在实际应用中,应根据场景选择合适的方法,充分发挥vector容器的优势。希望本文对大家有所帮助。


http://www.kler.cn/a/281989.html

相关文章:

  • 有限状态机(续)
  • Java——并发工具类库线程安全问题
  • DNS with libevent
  • 【学习笔记】大模型调优(llms_tuning)
  • 【原创】如何备份和还原Ubuntu系统,非常详细!!
  • 前端:HTML (学习笔记)【1】
  • 人工智能算力FP32、FP16、TF32、BF16、混合精度解读
  • 深度解析:防火墙技术在网络安全中的应用与发展
  • Java的GC(Garbage Collection,垃圾回收)
  • 软件测试——测试分类
  • K8S声明式的管理方式
  • RocketMQ第5集
  • Oracle使用手册
  • 【C#】静态成员(static)与实例成员(非静态成员)的理解
  • 为什么 PageHelper 不需要配置而 MP 需要?
  • 浅谈Kafka(二)
  • 一元四次方程求解-【附MATLAB代码】
  • blender修改材质时出现颜色丢失的问题
  • 基于单片机的一氧化碳报警系统的设计与实现
  • 算法笔记|Day37动态规划X
  • k8s探针详细学习笔记
  • day42 代码随想录 | 子序列问题 面试高频题
  • 【Material-UI】Slider 组件中的 Range Slider 详解
  • 【mysql】mysql之数据查询语言
  • 【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondScale.cs
  • 爬取数据时,如何避免违法问题