STD::C++中的ItItHype交换

交换 用于在两个容器之间交换元素。做同样事情的另一种方式是 标准:国际热核聚变实验堆交换, 顾名思义,它用于在迭代器的帮助下交换元素。

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
喜欢就支持一下吧
点赞15 分享