std::vector 是 C++ 标准库中的一个动态数组容器,它允许我们存储和操作一组同类型的元素。除了常见的存取元素操作外,std::vector 还提供了其他功能,比如交换两个容器的内容。这种操作有时在算法实现或数据结构转换中非常有用。
交换容器的概念
交换两个容器的内容意味着一个容器将拥有另一个容器中的所有元素,而原始容器将变得为空或包含另一个容器的原始元素。在 std::vector 中,这种操作是通过 swap 成员函数实现的,它无需复制或移动任何元素,而是通过交换内部指针或迭代器来实现高效的内容交换。
使用 swap 成员函数
std::vector 的 swap 成员函数允许我们直接交换两个 vector 对象的内容。
在这个例子中,我们创建了两个 vector 对象 vec1 和 vec2,并使用 swap 成员函数交换了它们的内容。注意,交换操作是就地发生的,不需要任何额外的存储空间。
swap 的效率
std::vector 的 swap 成员函数通常是非常高效的,因为它只涉及指针或迭代器的交换,而不是元素的逐个复制或移动。因此,即使对于包含大量元素的 vector,swap 操作也通常非常快。
使用 std::swap 函数
除了 vector 类的 swap 成员函数外,还可以使用非成员函数 std::swap 来交换两个 vector 对象的内容。这个函数模板对大多数标准库容器都有效。
使用 std::swap 和 vector 的 swap 成员函数在效果上是相同的,但在某些情况下,使用非成员函数可能更具可读性,因为它不需要调用对象的成员函数。
注意事项
交换操作不会改变两个 vector 的容量(capacity),只会改变它们的大小(size)和包含的元素。
如果两个 vector 有不同的分配器(allocator),则交换操作可能会失败或产生未定义行为。在大多数情况下,我们使用默认分配器,因此这不是问题。
交换操作不会触发元素的移动