vector容器-互换容器讲解

简介: vector容器-互换容器讲解

std::vector 是 C++ 标准库中的一个动态数组容器,它允许我们存储和操作一组同类型的元素。除了常见的存取元素操作外,std::vector 还提供了其他功能,比如交换两个容器的内容。这种操作有时在算法实现或数据结构转换中非常有用。

 

交换容器的概念

交换两个容器的内容意味着一个容器将拥有另一个容器中的所有元素,而原始容器将变得为空或包含另一个容器的原始元素。在 std::vector 中,这种操作是通过 swap 成员函数实现的,它无需复制或移动任何元素,而是通过交换内部指针或迭代器来实现高效的内容交换。

 

使用 swap 成员函数

std::vector 的 swap 成员函数允许我们直接交换两个 vector 对象的内容。

image.png

image.png

在这个例子中,我们创建了两个 vector 对象 vec1 和 vec2,并使用 swap 成员函数交换了它们的内容。注意,交换操作是就地发生的,不需要任何额外的存储空间。

 

swap 的效率

std::vector 的 swap 成员函数通常是非常高效的,因为它只涉及指针或迭代器的交换,而不是元素的逐个复制或移动。因此,即使对于包含大量元素的 vector,swap 操作也通常非常快。

 

使用 std::swap 函数

除了 vector 类的 swap 成员函数外,还可以使用非成员函数 std::swap 来交换两个 vector 对象的内容。这个函数模板对大多数标准库容器都有效。

image.png

使用 std::swap 和 vector 的 swap 成员函数在效果上是相同的,但在某些情况下,使用非成员函数可能更具可读性,因为它不需要调用对象的成员函数。

 

注意事项

交换操作不会改变两个 vector 的容量(capacity),只会改变它们的大小(size)和包含的元素。

如果两个 vector 有不同的分配器(allocator),则交换操作可能会失败或产生未定义行为。在大多数情况下,我们使用默认分配器,因此这不是问题。

交换操作不会触发元素的移动

目录
相关文章
|
3月前
|
存储 C++ 容器
如何将没有复制或移动构造函数的对象放入vector容器
如何将没有复制或移动构造函数的对象放入vector容器
38 0
|
5月前
|
存储 算法 编译器
8.STL中Vector容器的常见操作(附习题)
8.STL中Vector容器的常见操作(附习题)
|
5月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
|
5月前
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
62 5
|
5月前
|
存储 算法 C++
【C++/STL】:vector容器的基本使用
【C++/STL】:vector容器的基本使用
39 1
|
4月前
|
存储 安全 C++
|
4月前
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
5月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
221 0
|
5月前
|
算法 编译器 Linux
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
44 0
|
5月前
|
存储 缓存 C++
Vector容器介绍
Vector容器介绍