C++ --- std::array容器与std::vector容器的区别

std::array和std::vector的区别

在C++中,array和vector都是用于存储一系列相同类型元素的容器,但它们之间存在几个关键的区别。这些区别主要体现在内存管理、大小固定性、性能以及功能特性等方面。

一、内存管理和大小固定性

(1)std::array

  1. std::array是C++11中引入的固定大小的容器。它的大小在编译时就必须确定,且之后不能改变。即要定义一个array数组时必须指明数据类型和个数:std::array<int,10> arr;
  2. std::array的内存分配在栈上。

(2)std::vector

  1. std::vector是一个动态数组,其大小可以在运行时改变。
  2. 它管理一个动态分配的数组,用于存储元素。这意味着std::vector可以随着元素的增加或删除而自动调整其大小。
  3. std::vector的内存分配在堆上

std::array实例化出来的对象的大小根据数据类型和个数来确定,而std::vector实例化出来的对象的大小是固定的,不会因为存储数据的不同而改变,只会因环境不同才会发生改变,即x86(32位)或x64(64位)。

如:

x86环境下(32位):


x64环境下( 64位):

二、性能

(1)std::array

  1. 由于其大小固定且内存分配在编译时确定,因此std::array通常具有更好的性能,尤其是在需要频繁访问其元素时。
  2. 没有动态内存分配的开销,也没有在增加或删除元素时的性能成本。

(2)std::vector

  1. 当std::vector的大小改变时(尤其是增长时),可能需要重新分配更大的内存块,并将旧元素复制到新位置,这可能会有性能开销
  2. 对于需要动态调整大小的场景,std::vector提供了非常灵活且高效的解决方案。

三、功能特性

(1)std::array

  1. 提供了随机访问能力,但缺乏std::vector提供的一些高级功能,如动态大小调整、push_back/pop_back等。
  2. 不能对数据进行初始化。

(2)std::vector

  1. 提供了丰富的成员函数,支持动态大小调整、插入、删除元素等操作,这是std::array所不具备的。

  2. 支持对数据的初始化 ,且初始化方式有多种。

四 、使用场景

(1)std::array:

  1. 当你确切知道需要存储的元素数量,且这个数量不会改变时,使用std::array。
  2. 它适合用作固定大小的缓冲区或数据结构的一部分。

(2)std::vector:

  1. 当你需要动态地调整容器的大小,或者不确定最终需要存储多少元素时,使用std::vector。
  2. 它适合用作需要动态数据集合的场景,如列表、堆栈等。
相关推荐
linux kernel9 分钟前
第七讲:C++中的string类
开发语言·c++
Tipriest_22 分钟前
[数据结构与算法] 优先队列 | 最小堆 C++
c++·优先队列·数据结构与算法·最小堆
玩代码23 分钟前
Java线程池原理概述
java·开发语言·线程池
宛西南浪漫戈命35 分钟前
Centos 7下使用C++使用Rdkafka库实现生产者消费者
c++·centos·linq
泰勒疯狂展开39 分钟前
Java研学-MongoDB(三)
java·开发语言·mongodb
zzywxc7871 小时前
AI技术通过提示词工程(Prompt Engineering)正在深度重塑职场生态和行业格局,这种变革不仅体现在效率提升,更在重构人机协作模式。
java·大数据·开发语言·人工智能·spring·重构·prompt
高hongyuan1 小时前
Go语言教程-占位符及演示代码
开发语言·后端·golang
她说人狗殊途1 小时前
多线程 JAVA
java·开发语言
星竹晨L2 小时前
C语言——预处理详解
c语言·开发语言
Freak嵌入式2 小时前
一文速通 Python 并行计算:13 Python 异步编程-基本概念与事件循环和回调机制
开发语言·python·嵌入式·协程·硬件·异步编程