📜  C++中的std :: iter_swap

📅  最后修改于: 2021-05-30 09:37:54             🧑  作者: Mango

std :: swap用于在两个容器之间交换元素。执行此操作的另一种方法是由std :: iter_swap促进的,顾名思义,该方法用于在迭代器的帮助下交换元素。

它只是交换迭代器指向的元素的值。如果看一下它的内部工作原理,我们会发现该函数本身使用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 
#include 
#include 
using namespace std;
int main()
{
    // Declaring first vector
    vector 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::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有用地封装了可交换接口的一部分,否则您每次都会实现该部分。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”