C++的STL容器类(Vector)----第一篇

目录

1、Vector是什么

Vector 是 C++ STL 中的一个容器,它提供了动态数组的功能。

2、Vector是存放在堆区还是栈区

3、Vector是怎么来处理元数据的

4、Vector改变相应的堆区和栈区是怎么做改变的

5、Vector有哪些常用的属性和方法

6、Vector的使用


相关的项目部分代码已完成(可以最直观的查看怎么使用):

衔接:

C++的STL容器类(Vector)----第二篇(项目篇)_锦亦之2233的博客-CSDN博客

1、Vector是什么

Vector 是 C++ STL 中的一个容器,它提供了动态数组的功能。

2、Vector是存放在堆区还是栈区

vector 中的元素存储在堆区(heap)而不是栈区(stack)。

vector 是一个动态数组,它的大小在运行时可以动态改变。为了支持动态大小,vector 在内存中使用了堆区进行元素的存储。

当你创建一个 vector 对象时,会在栈区上分配一个存储 vector 元数据的对象(例如,指向堆区数组的指针和数组的大小)。而实际的元素数组则在堆区动态分配内存。这使得 vector 能够在运行时根据需要动态增加或减少存储空间。

使用堆区存储数据的好处是可以灵活地管理内存,并且避免了栈区的大小限制。但同时也需要注意在不再需要 vector 对象时,确保及时释放其占用的内存,以避免内存泄漏。

需要注意的是,vector 的元数据(例如,指针和大小)存储在栈区,但实际的元素数组存储在堆区。

3、Vector是怎么来处理元数据的

vector 中,元数据(指针和大小等)是存储在栈区的,而实际的元素数组是存储在堆区的。

当你创建一个 vector 对象时,其元数据(包括指向元素数组的指针和数组的大小等信息)会被分配在栈区。这些元数据的大小是固定的,不会随着 vector 元素的增减而改变。

而实际的元素数组是通过动态内存分配(使用 newmalloc 等函数)在堆区创建的。这个数组的大小是可变的,会根据 vector 的操作(如添加或删除元素)而动态改变。

当你向 vector 添加元素时,它会根据需要在堆区动态分配更多的内存来存储新增的元素。当元素数量超过当前分配的内存空间时,vector 会重新分配更大的内存块,并将现有元素复制到新的内存块中。

因此,vector 的元数据存储在栈区,而实际的元素数组存储在堆区,并且数组的大小是根据需要动态改变的。在需要更多内存时,vector 会重新分配堆区内存,并将元素从旧内存复制到新内存中。这样可以实现 vector 的动态大小和灵活性。

4、Vector改变相应的堆区和栈区是怎么做改变的

vector 中,栈区的元数据包括指向堆区元素数组的指针和表示当前元素数量的大小值。

当你创建一个 vector 对象时,会在栈区上分配一块内存来存储这些元数据。初始时,指针会被设置为 nullptr 或指向空的堆区内存块,而大小值会被初始化为 0。

当你向 vector 添加新元素时,栈区的元数据中的大小值会被更新,反映了 vector 中元素的实际数量。这是 vector 对象内部的逻辑操作。

具体而言,当你调用 push_back 函数向 vector 添加元素时,如果当前的元素数量已经达到了堆区内存空间的上限,vector 会触发重新分配内存的操作。它会分配一个更大的内存块,并将旧的元素数据从旧的内存复制到新的内存中。然后,栈区中的指针会被更新,指向新分配的堆区内存块,并且栈区的大小值会被更新为新的元素数量。

总结起来,栈区中的元数据会在 vector 中进行更新和调整,以反映堆区中元素数组的大小和位置的变化。这些操作由 vector 内部进行管理,开发人员无需显式地操纵栈区的元数据。

5、Vector有哪些常用的属性和方法

类:

  • std::vector<T>: vector 的主要类模板,其中 T 是存储在 vector 中的元素类型。

构造函数:

  • vector(): 默认构造函数,创建一个空的 vector
  • vector(size_type count): 创建一个具有指定数量的默认构造元素的 vector
  • vector(size_type count, const T& value): 创建一个具有指定数量的值为 value 的元素的 vector
  • vector(const vector& other): 复制构造函数,创建一个与另一个 vector 相同的副本。
  • vector(iterator first, iterator last): 创建一个包含从 first 迭代器到 last 迭代器范围内元素的 vector

成员函数:

  • size(): 返回 vector 中的元素数量。
  • empty(): 检查 vector 是否为空,返回 truefalse
  • push_back(const T& value): 将元素 value 添加到 vector 的尾部。
  • pop_back(): 删除 vector 的尾部元素。
  • clear(): 清空 vector 中的所有元素。
  • resize(size_type count): 更改 vector 的大小,使其包含 count 个元素。
  • reserve(size_type count): 请求 vector 为至少 count 个元素预留存储空间。
  • operator[] (size_type index): 访问 vector 中指定索引位置的元素。

迭代器相关操作:

  • begin(): 返回指向 vector 第一个元素的迭代器。
  • end(): 返回指向 vector 最后一个元素之后位置的迭代器。
  • rbegin(): 返回指向 vector 最后一个元素的反向迭代器。
  • rend(): 返回指向 vector 第一个元素之前位置的反向迭代器。

6、Vector的使用

小项目:有一个班级有三名学生,将三名学生的姓名,年龄,学号保存到vector中。

1、构造一个能够保存学生信息的vector函数

2、将这个班级中的学生姓名打印出来

3、将这个班级中的学生年龄打印出来

4、将这个班级中的学生学号打印出来

5、增加一个学生的学生信息

6、删除新增的这个学生的信息

7、修改第三名学生的姓名、年龄以及学号

8、查询第三名学生的姓名、年龄以及学号并打印出来

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值