交换 用于在两个容器之间交换元素。做同样事情的另一种方式是 标准:国际热核聚变实验堆交换, 顾名思义,它用于在迭代器的帮助下交换元素。
null
它只是交换迭代器指向的元素的值。如果我们观察它的内部工作,我们会发现这个函数本身使用 std::swap() .
语法:
void iter_swap (ForwardIterator1 a, ForwardIterator2 b); Here, a and b are forward iterators. Returns: 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的结尾。
标准:iter_交换vs标准:交换
当我们知道iter_交换是用来交换值的,就像std::swap()一样,现在的问题是,如果我们已经有了一个叫做swap()的东西,为什么我们要学习iter_交换呢。支持iter_交换的一些原因是:
- 优化基于节点的序列: 大多数STL算法在迭代器范围内运行。因此,在交换这些范围内的元素时,使用iter_交换是有意义的,交换两个迭代器指向的元素。这允许优化基于节点的序列,例如 std::列表 ,节点只是重新链接,而不是实际交换数据。
- 在STL定义中使用: 一些STL算法,比如 标准:反向 在定义中使用std::iter_交换。因此,为了理解这些定义,人们应该了解这一点。
// Definition of std::reverse()
template
void
reverse(BidirectionalIterator first,
BidirectionalIterator last)
{
while
((first != last) && (first != --last))
{
std::iter_swap(first, last);
++first;
}
}
- 提供抽象: iter_swap有效地封装了可交换接口的一部分,否则每次都会实现。
本文由 辛格先生 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END