std::swap用于在两个容器之间交换元素。 std::iter_swap促进了完成此操作的另一种方法,顾名思义,该方法用于在迭代器的帮助下交换元素。
它只是交换迭代器指向的元素的值。如果看一下它的内部工作,我们会发现该函数本身使用std::swap(。
用法:
void iter_swap (ForwardIterator1 a, ForwardIterator2 b); Here, a and b are forward iterators. 返回: It has a void return type, so it does not return any value.
// C++ program to demonstrate the use of std::iter_swap
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
// Declaring first vector
vector<int> v1;
int i;
for (i = 0; i < 10; ++i) {
v1.push_back(i);
}
// v1 contains 0 1 2 3 4 5 6 7 8 9
vector<int>::iterator i1, i2;
i1 = v1.begin();
i2 = v1.end() - 1;
// Performing swap between first and last element
// of vector
std::iter_swap(i1, i2);
// Displaying v1 after swapping
for (i = 0; i < 10; ++i) {
cout << v1[i] << " ";
}
return 0;
}
输出:
9 1 2 3 4 5 6 7 8 0
在此程序中,我们在两个迭代器的帮助下交换了v1中的元素,其中一个指向v1的开头,另一个指向v1的结尾。
std::iter_swap与std::swap
在知道iter_swap用于交换值之后,就像std::swap(),现在出现的问题是,如果我们已经有了swap(),为什么我们应该学习iter_swap。支持iter_swap的一些原因是:
- 基于节点的序列的优化:大多数STL算法在迭代器范围上运行。因此,在交换那些范围内的元素,交换由两个迭代器指向的元素时,使用iter_swap是有意义的。这允许对基于节点的序列(例如std::list)进行优化,从而仅重新链接节点,而不是实际交换数据。
- 在STL定义中使用:一些stl::reverse之类的STL算法在其定义中涉及使用std::iter_swap。因此,为了理解这些定义,应该对此有所了解。
// Definition of std::reverse() template void reverse(BidirectionalIterator first, BidirectionalIterator last) { while ((first != last) && (first != --last)) { std::iter_swap(first, last); ++first; } }
- 提供抽象:iter_swap有用地封装了可交换接口的一部分,否则您每次都会实现该部分。
相关用法
注:本文由纯净天空筛选整理自 std::iter_swap in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。