【C++学习笔记】STL容器之std::vector和std::array的区别

目录

一、vector和array的区别

二、vector和array的使用方法

三、vector和array的使用案例


一、vector和array的区别

std::vectorstd::array都是C++ STL中的容器类模板,用于存储一组元素。它们之间的区别在于:

  • std::vector是动态数组,可以动态调整容器大小,而std::array是静态数组,其大小在编译时就已经确定,不能改变。
  • std::vector依赖动态分配/释放内存,这是比较耗时的,而std::array的内存大小固定,编译时直接分配一段栈上/静态存储区内存即可,速度远快于std::vector
  • std::vector支持动态扩容,可以在运行时动态增加或减少容器大小,而std::array的大小在编译时就已经确定,不能改变。
  • std::vector可以使用迭代器访问元素,而std::array可以使用下标运算符访问元素。
  • std::vector的元素在内存中不一定是连续的,而std::array的元素在内存中是连续的。

       因此,如果程序需要频繁的创建销毁容器,大小固定(而且不会爆栈).则选用 std::array 较为合适如果创建销毁不是特别频繁,且容器大小不确定,可以选用 std::vector。在正确使用下的 std::vector和 std::array它们的性能差距在大部分情况下不会构成瓶颈。

二、vector和array的使用方法

  • std::vector的使用方法:

    • 创建一个空的std::vector对象:std::vector<T> vec;
    • 创建一个指定大小的std::vector对象:std::vector<T> vec(n);
    • std::vector的末尾添加元素:vec.push_back(value);
    • 访问std::vector中的元素:vec[i]vec.at(i)
    • 获取std::vector的大小:vec.size()
    • 清空std::vector中的所有元素:vec.clear()
    • 删除std::vector中的最后一个元素:vec.pop_back()
    • 删除std::vector中的指定元素:vec.erase(vec.begin() + i);
    • 迭代访问std::vector中的元素:for (auto it = vec.begin(); it != vec.end(); ++it) { ... }
  • std::array的使用方法:

    • 创建一个空的std::array对象:std::array<T, N> arr;
    • 创建一个指定大小的std::array对象:std::array<T, N> arr = { ... };
    • 访问std::array中的元素:arr[i]arr.at(i)
    • 获取std::array的大小:arr.size()

三、vector和array的使用案例

  • std::vector的使用案例:
    • 用于存储动态大小的元素集合,例如,存储用户输入的字符串。
    • 用于实现动态数组,例如,存储图像的像素值。
    • 用于实现栈和队列,例如,存储函数调用的参数和局部变量。
    • 用于实现哈希表,例如,存储键值对。
    • 用于实现图和树的遍历,例如,存储节点的指针。
  • std::array的使用案例:
    • 用于存储固定大小的元素集合,例如,存储一组常量。
    • 用于实现静态数组,例如,存储颜色的RGB值。
    • 用于实现矩阵和张量,例如,存储图像的像素值。
    • 用于实现缓冲区,例如,存储网络数据包。
    • 用于实现栈和队列,例如,存储函数调用的参数和局部变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值