C++ Vectors2025 年 8 月 29 日 | 阅读 10 分钟 在 C++ 中,vector 是标准模板库 (STL) 的一部分。它们是动态数组,在添加或删除元素时可以自动调整大小。 ![]() 与具有固定大小的数组不同,vector 提供了广泛的灵活性和底层函数,这使得它们成为 C++ 中最有用的数据结构之一。vector 提供了许多有用的成员函数,例如 push_back()、insert()、size()、clear()、front()、pop_back() 等。 vector 是一种序列容器类,它实现了一个动态数组,这意味着在追加元素时大小会自动更改。vector 将元素存储在连续的内存位置,并在运行时根据需要分配内存。当需要更多空间时,vector 会分配新内存,将现有元素复制到新内存,然后处理旧内存。 语法它具有以下语法: 在这个语法中,
创建 Vector如果我们需要创建一个 vector,我们必须包含 <vector> 头文件。 C++ Vector 示例让我们看一个简单的例子来说明 C++ Vector。 示例编译并运行输出 Vector created 插入元素在 C++ 中,可以通过 insert() 方法将元素插入到 vector 中,该方法需要线性时间。如果我们想在末尾插入数字,可以使用 push_back() 方法。它工作得更快,只需要恒定的时间。 语法 它具有以下系统 C++ 中插入 C++ 元素让我们看一个在 C++ 中插入元素的简单例子。 示例编译并运行输出 T p o i n t 访问和更新元素我们可以使用 [] 运算符或 at() 方法访问元素。[] 方法速度快但不安全,因为它不检查给定的索引是否存在于 vector 中。我们还可以使用 .at() 方法来访问元素。可以通过使用索引分配新值来更新元素。 语法 它具有以下语法: 访问和更新元素示例让我们举一个例子来说明如何在 vector 中访问和更新元素。 示例编译并运行输出 The Accessing Value at position 4 is: u The Accessing Value at position 3 is: o The Updating Value at Position 4 is: y The Updating Value at Position 2 is: z 查找 Vector 大小数组的一个主要常见问题是需要维护一个单独的变量来跟踪它们的大小。Vector 可以通过使用 size() 函数来解决这个问题,该函数有助于返回 vector 中当前元素的数量。 语法 它具有以下语法 查找 Vector 大小的示例让我们举一个例子来说明 C++ 中 vector 的大小。 示例编译并运行输出 The Size of Vector is: 10 遍历 Vector我们可以使用传统的 for 循环、基于范围的 for 循环和迭代器来遍历 vector。我们可以利用循环并通过 vector size() 方法确定 vector 的大小来迭代此范围。 遍历 Vector 的示例让我们举一个例子来说明如何在 C++ 中遍历 vector。 示例编译并运行输出 T p o i n t T e c h 删除元素vector 允许使用 erase() 和 pop_back() 函数删除最后一个元素或从任何位置删除元素。如果我们知道 vector 中元素的值,我们可以使用 find() 函数来查找该元素的位置。之后,我们可以使用 vector pop_back() 函数删除只需要恒定时间的元素。 语法 它具有以下语法: 在 Vector 中删除元素的示例让我们举一个例子来说明如何在 C++ 中的 vector 中删除元素。 示例编译并运行输出 T p o i n Vector 操作的时间复杂度
将 Vector 传递给函数vector 可以按值(复制)、引用(修改原始)或 const 引用(只读)传递。 语法 它具有以下语法: Vector 的内部工作原理在 C++ 中,vector 可以自动管理其存储。当我们插入一个元素并且没有剩余容量时,vector 会通过分配新内存、将现有元素复制到新内存并删除旧内存来调整自身大小。这种机制确保 push_back() 以摊销常数时间运行。 要点
多维 Vectorvector 可以嵌套以创建 2D 或 3D 结构。它在涉及矩阵的问题中很有用。 语法 它具有以下语法: 多维 Vector 示例让我们举一个例子来说明 C++ 中的多维 vector。 示例编译并运行输出 1 2 3 4 5 6 7 8 9 说明 此代码创建一个具有三行三列的 2D vector(矩阵),并用特定值对其进行初始化。之后,它使用嵌套循环以逐行顺序打印每个元素,从而创建一个矩阵。 C++ Vector 函数在 C++ 中,vector 提供了多种函数来执行不同类型的操作。下表显示了函数的名称及其描述。
C++ Vectors 示例让我们看一个程序,演示 C++ 中各种 vector 函数。 示例编译并运行输出 Vector elements: 10 15 17 25 30 40 50 Size: 7 Capacity: 7 Max Size: 1073741823 After deletion: 15 17 25 30 40 Front: 15 Back: 40 At(1): 17 After swap v1: 100 200 Is v1 empty? Yes After assign: 99 99 99 First element via data(): 99 Vector 和 Array 之间的区别在 C++ 中,数组和 vector 都用于存储相似数据类型的集合,但它们在结构、灵活性和内存管理方面有所不同。
总而言之,C++ 中的 vector 非常高效、易于使用,并且是原始数组的强大替代方案。它们为动态调整大小、插入、删除和遍历提供了丰富的任务集,并与 STL 的其余部分良好集成。掌握 vector 不仅可以简化代码,还可以使其更高效、更整洁。无论我们是处理像矩阵这样的复杂结构还是简单数据,vector 都是我们在 C++ 中的首选工具。 C++ Vectors 选择题1. 有什么重要特性将 vector 与 C++ 中的传统数组区分开来?
答案:c) Vectors 支持动态调整大小 2. 当 C++ vector 超过其当前容量时,内部会发生什么?
答案:c) Vector 会分配新内存并复制现有元素 3. 下列哪项最好地描述了 vector 中的 capacity() 函数?
答案:b) 返回在重新分配之前可以存储的元素数量 4. 与 C++ 中的原始数组相比,使用 vector 的主要优势是什么?
答案:c) vector 具有底层的动态大小和实用函数 5. reserve() 函数在 vector 方面有什么作用?
答案:c) 预分配内存以避免频繁的重新分配。 下一主题C++ Queue |
在 C++ 中,map 是 STL(标准模板库)的一部分。Map 是关联容器,它们存储排序的键值对,其中每个键都是唯一的,可以插入或删除,但不能修改。与键相关联的值可以更改。语法是……
阅读 13 分钟
在 C++ 中,multimap 是 C++ STL(标准模板库)的一部分。Multimap 是像 map 一样的关联容器,它们存储排序的键值对,但与只存储唯一键的 map 不同,multimap 可以有重复的键。默认情况下,它使用 (<) 运算符进行比较……
阅读 13 分钟
在 C++ 中,std::list 是一个序列容器,它允许元素的非连续存储。它实现为双向链表,其中每个元素包含前一个和后一个列表元素的地址。它允许我们将数据存储在……
阅读 15 分钟
在 C++ 中,bitset 是一个包含固定大小位序列(0 和 1)的容器。它使我们能够有效地管理和操作固定大小的位序列。它适用于低级操作、内存高效存储和位逻辑。它实现为……
11 分钟阅读
函数 C++ 中,标准模板库 (STL) 在 <<algorithm> 头文件中提供了强大的底层函数集合。这些函数有助于对数组、向量、列表和其他容器等序列执行各种操作。算法函数是通用的,并且操作迭代器,...
阅读 24 分钟
C++ STL Set 在 C++ 中,set 代表基本数据结构,它以某种排序顺序排列唯一元素并存储它们。集合称为关联容器,唯一排序的元素称为排序键。我们可以插入或……
阅读9分钟
在 C++ 中,stack 是一种线性数据结构,它遵循后进先出(LIFO)原则执行操作。这意味着最后添加的元素将首先被删除,而最后添加的元素最后被删除。在 C++ 中,STL 提供了一个……
阅读9分钟
在 C++ 中,deque(双端队列)是一种队列,其中可以在队列的前端和后端添加和删除元素。它支持 FIFO 和 LIFO 操作,这比队列提供了更大的灵活性。在 C++ 中,STL deque 是一个序列容器,它……
11 分钟阅读
在 C++ 中,priority_queue 是 STL 中的一个派生容器,它只考虑优先级最高的元素。队列遵循 FIFO 原则,而 priority_queue 根据优先级弹出元素,即最高优先级的元素首先弹出。它类似于……
阅读 10 分钟
教程 编译器 程序 面向对象编程 STL 面试题 C++ STL (标准模板库) 在 C++ 中,标准模板库 (STL) 是一组强大的模板类和函数,提供了通用的数据...
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India