← 模式

交换容器

12345678910111213141516#include <algorithm> #include <utility> #include <vector> int main() { std::vector<int> v1 = { 1, 3, 5, 7 }; std::vector<int> v2 = { 2, 4, 6, 8 }; std::swap_ranges(std::begin(v1), std::end(v1), std::begin(v2)); v1.swap(v2); using std::swap

; swap(v1, v2); }

此模式采用 CC0 公共领域贡献 许可。

要求 c++98 或更新版本。

意图

交换两个容器的内容。

描述

第 7-8 行,我们创建了两个 std::vector 并用值初始化它们。

第 10 行,我们使用 std::swap_ranges 算法来交换两个 std::vector 的内容。该算法需要传入一个范围的起始和结束迭代器,以及第二个范围的起始迭代器。这会逐个元素地交换它们的值(在本例中,进行了四次交换)。第二个范围的元素数量必须至少与第一个范围相同。此操作后,迭代器仍然有效,并指向与之前相同的容器。

第 12 行,我们使用 std::vectorswap 成员函数一次性交换所有内容。作为替代方案,第 14-15 行使用通用交换模式执行了相同的操作。这种方法比 std::swap_ranges 快得多,因为它只是在常数时间内交换内部存储。它也不要求容器具有相同的大小。但是,操作之后,迭代器将指向另一个容器,而尾后迭代器(past-the-end iterators)会失效。

贡献者

  • Joseph Mansfield
  • Mark A. Gibbs

最后更新

2018年8月27日

来源

在 GitHub 上 Fork 此模式

分享