C++ 中 std::set 和 std::vector 的区别

2025年3月17日 | 阅读 3 分钟

在本文中,我们将讨论 C++ 中 std::setstd::vector 的区别。但在讨论区别之前,我们必须了解 C++ 中的 std::set 和 std::vector。

什么是 std::vector?

vector 是 C++ 中的一种动态数组式容器,可以容纳许多相同数据类型的元素。与数组不同,vector 可以在执行期间增加和缩小大小。vector 作为 C++ 标准模板库 (STL) 的一部分,在 <vector> 头文件中提供。

示例

C++ 中 vector 的用途

vector 在 C++ 中可以用于以下方式

集合:vector 可以存储相同数据类型的项目集合,例如整数、浮点数或消息。

大小:vector 可以在运行时扩大和缩小大小,这使得当我们事先不知道集合大小或集合大小在运行时可能发生变化时非常方便。

快速随机访问:由于 vector 中的项目存储在内存中的相邻区域,因此可以使用其索引以常数时间访问它们。

高效内存分配:vector 有效地分配内存,允许我们以最小的开销从 vector 的末尾添加或删除成员。

与其他各种库的互操作性:由于 vector 是 C++ 标准模板库的一部分,因此 vector 可以与各种 STL 容器、计算和迭代器一起使用。

什么是 std::set?

集合 (Sets) 是一种关联容器,其中每个元素都必须是唯一的,因为组件的值标识它。数据以特定的排序顺序保存,无论是递增还是递减。std::set 类是 C++ 标准模板库 (STL) 的一部分,定义在 <set> 标准头文件中。

C++ 中一些最流行的集合属性如下

唯一性属性:在 C++ 中,集合的每个组件都必须是唯一的,这意味着不允许重复值。因此,C++ 中的集合不提倡冗余。

排序性:集合容器的组件默认以排序方式存储。

不变性:一旦值保存在集合中,就不能更改它们。因此,允许插入删除,但我们不能更新或编辑集合的当前项目。

内部实现:在 C++ 中,集合的逻辑构造是通过 BST 完成的。

std::set 和 std::vector 的区别

Difference between std::set vs std::vector in C++

std::setstd::vector 之间存在一些区别。std::set 和 std::vector 的一些主要区别如下

特点std::setstd::vector
基本数据结构平衡二叉搜索树(例如,红黑树)动态数组(连续内存块)
元素迭代基于插入顺序的顺序重复。基于排序的有序重复。
内存管理它为每个元素动态分配资源。它为所有项目分配连续的块。
排序定制比较运算符用于对元素进行排序。算法可用于定制排序。
插入效率由于平衡操作,它较慢。它更快,特别是对于末尾插入。
内存重新分配插入时不需要重新分配。插入可能需要重新配置。