目录
Vector 是 C++ STL 中的一个容器,它提供了动态数组的功能。
相关的项目部分代码已完成(可以最直观的查看怎么使用):
衔接:
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
元素的增减而改变。
而实际的元素数组是通过动态内存分配(使用 new
或 malloc
等函数)在堆区创建的。这个数组的大小是可变的,会根据 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
是否为空,返回true
或false
。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、查询第三名学生的姓名、年龄以及学号并打印出来