← 模式
交换容器
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 |
此模式采用 CC0 公共领域贡献 许可。
要求 c++98 或更新版本。
意图
交换两个容器的内容。
描述
在第 7-8 行,我们创建了两个 std::vector
并用值初始化它们。
在第 10 行,我们使用 std::swap_ranges
算法来交换两个 std::vector
的内容。该算法需要传入一个范围的起始和结束迭代器,以及第二个范围的起始迭代器。这会逐个元素地交换它们的值(在本例中,进行了四次交换)。第二个范围的元素数量必须至少与第一个范围相同。此操作后,迭代器仍然有效,并指向与之前相同的容器。
在第 12 行,我们使用 std::vector
的 swap
成员函数一次性交换所有内容。作为替代方案,第 14-15 行使用通用交换模式执行了相同的操作。这种方法比 std::swap_ranges
快得多,因为它只是在常数时间内交换内部存储。它也不要求容器具有相同的大小。但是,操作之后,迭代器将指向另一个容器,而尾后迭代器(past-the-end iterators)会失效。