vector容器-容量和大N小c++的讲解

简介: vector容器-容量和大N小c++的讲解

std::vector 是 C++ 标准模板库(STL)中的一个动态数组容器,它允许我们存储一系列同类型的元素,并且可以根据需要动态地调整其大小。在 std::vector 中,有两个重要的概念:容量(capacity)和大小(size)。容量指的是 vector 当前分配的存储空间能够容纳的元素数量,而大小则指的是 vector 当前实际包含的元素数量。

 

一、大小(Size)

大小表示 vector 中当前存储的元素个数。可以使用 size() 成员函数来获取 vector 的大小。

 

代码示例

image.png

讲解

在上面的代码中,我们首先创建了一个空的 vector,并使用 size() 函数输出了其初始大小,结果为 0。接着,我们使用 push_back() 函数向 vector 中添加了三个元素,并再次使用 size() 函数输出了添加元素后的大小,结果为 3。这表明 size() 函数返回的是 vector 中实际存储的元素数量。

 

二、容量(Capacity)

容量表示 vector 当前分配的存储空间能够容纳的元素数量。它通常大于或等于 vector 的大小,因为 vector 为了提高性能,在内部通常会分配比实际存储元素更多的空间。当 vector 的大小增加到接近其容量时,它会自动分配更多的内存空间。可以使用 capacity() 成员函数来获取 vector 的容量。

 

代码示例

image.png

讲解

在上面的代码中,我们创建了一个空的 vector 并输出了其初始大小和容量。由于 vector 是空的,所以初始大小和容量都是 0。接着,我们使用一个循环向 vector 中添加了 10 个元素,并输出了添加元素后的大小和容量。通常情况下,vector 的容量会大于其大小,以减少重新分配内存的次数,提高性能。在输出中,我们可以看到容量通常是一个大于或等于大小的数。

 

三、调整容量

如果需要明确设置 vector 的容量,可以使用 reserve() 成员函数。reserve() 讲解

在上面的代码中,我们创建了一个空的 vector 并输出了其初始大小和容量。由于 vector 是空的,所以初始大小和容量都是 0。接着,我们使用一个循环向 vector 中添加了 10 个元素,并输出了添加元素后的大小和容量。通常情况下,vector 的容量会大于其大小,以减少重新分配内存的次数,提高性能。在输出中,我们可以看到容量通常是一个大于或等于大小的数。

 

三、调整容量

如果需要明确设置 vector 的容量,可以使用 reserve() 成员函数。reserve() 函数允许我们预先分配一定的内存空间,以避免在添加元素时频繁地重新分配内存。

 

代码示例,以避免在添加元素时频繁地重新分配内存。

 

代码示例

image.png

目录
相关文章
|
2月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
82 4
|
27天前
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
57 0
|
1月前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
39 0
|
2月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
44 0
|
3月前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
29 1
|
3月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
40 0
|
5天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
43 18
|
5天前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
31 13
|
5天前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
22 5
|
5天前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
20 5