使用一个东西,不明白它的道理,不高明
——侯捷老师
1. iter_swap()函数
功能:交换两个迭代器指向的值
1.1 函数声明
template <class ForwardIterator1, class ForwardIterator2>
void iter_swap (ForwardIterator1 a, ForwardIterator2 b);
1.2 等价实现
template <class ForwardIterator1, class ForwardIterator2>
void iter_swap (ForwardIterator1 a, ForwardIterator2 b) {
swap (*a, *b);
}
1.3 示例程式
void test_iter_swap() {
vector<int> v1 {1,2,3,4,5};
vector<int> v2 {10,20,30,40,50};
iter_swap(v1.begin(), v2.begin());
cout << "v1 contains: ";
for (auto& x : v1) {
cout << x << " ";
}
cout << endl;
}
输出结果:
image.png
2. swap()函数
示例程式:交换了vector的内容
void test_swap() {
vector<int> foo(4, 20);
vector<int> bar(5, 10);
std::swap(foo, bar);
cout << "foo contains: ";
for (auto& x : foo) {
cout << x << " ";
}
cout << endl;
}
3. swap_ranges()函数
功能:将两对应区间里的元素进行交换
3.1 函数声明
template <class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
3.2 示例程式
void test_swap_ranges() {
vector<int> foo {10,10,10,10,10};
vector<int> bar {20,20,20,20,20};
std::swap_ranges(foo.begin()+1, foo.end()-1, bar.begin());
cout << "foo constains:";
for (auto& x : foo) {
cout << x << " ";
}
cout << endl;
}
输出结果:image.png