📜  C++中的std :: front_inserter

📅  最后修改于: 2021-05-30 13:42:31             🧑  作者: Mango

std :: front_inserter构造一个前置插入迭代器,该迭代器在要应用它的容器的前面插入新元素。它在头文件中定义

前端插入迭代器是输出迭代器的一种特殊类型,其设计目的是使通常会覆盖元素(例如副本)的算法能够在容器的开头自动插入新元素。它与std :: back_inserter完全相反。

句法:

std::front_inserter (Container& x);

x: Container in which new elements will 
be inserted at the beginning.

Returns: A front_insert_iterator that inserts 
elements at the beginning of container x.
// C++ program to demonstrate std::front_inserter
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    // Declaring first container
    deque v1 = { 1, 2, 3 };
  
    // Declaring second container for
    // copying values
    deque v2 = { 4, 5, 6 };
  
    // Using std::front_inserter inside std::copy
    std::copy(v1.begin(), v1.end(), std::front_inserter(v2));
    // v2 now contains 3 2 1 4 5 6
  
    // Displaying v1 and v2
    cout << "v1 = ";
  
    int i;
    for (i = 0; i < 3; ++i) {
        cout << v1[i] << " ";
    }
  
    cout << "\nv2 = ";
    for (i = 0; i < 6; ++i) {
        cout << v2[i] << " ";
    }
  
    return 0;
}

输出:

v1 = 1 2 3
v2 = 3 2 1 4 5 6 

有什么帮助?

  • 反转容器:现在,由于std :: front_inserter在容器的开头插入了新元素,因此我们可以仅在copy()的帮助下执行reverse_copy()的任务,这样我们将创建另一个包含该容器的容器。当前容器的反向。
    // C++ program to demonstrate std::front_inserter
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    int main()
    {
        // Declaring first container
        deque v1 = { 1, 2, 3 };
      
        // Declaring second container
        // for storing the reverse
        deque v2;
      
        // Using std::front_inserter inside std::copy
        std::copy(v1.begin(), v1.end(), std::front_inserter(v2));
        // v2 now contains 3 2 1
      
        // Displaying v1 and v2
        cout << "v1 = ";
      
        int i;
        for (i = 0; i < 3; ++i) {
            cout << v1[i] << " ";
        }
      
        cout << "\nv2 = ";
        for (i = 0; i < 3; ++i) {
            cout << v2[i] << " ";
        }
      
        return 0;
    }
    

    输出:

    v1 = 1 2 3
    v2 = 3 2 1
    

    说明:在这里,我们开始将v1复制到v2,但是从头开始,因此每次将新元素插入到开头时,以此方式,最后插入的元素便成为新容器中的第一个元素,并且以此方式我们能够反转容器的内容。

要记住的要点:

  1. std :: front_inserter的陷阱之一是它只能与以push_front作为其方法之一的那些容器一起使用,例如在list和deque的情况下,并且不能与向量一起使用。
  2. push_front()与front_inserter():现在,您可能会认为push_front()和front_inserter相似,但两者并不相似。当必须在算法中传递迭代器时,则应像上述情况一样使用front_inserter,而通常在容器的开头插入值时,可以使用push_front()。
  3. 代替使用std :: front_inserter,我们可以创建一个front_insert_iterator然后再使用它,因为最终,std :: front_inserter仅返回front_insert_iterator。
    // C++ program to demonstrate front_insert_iterator
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    int main()
    {
        // Declaring first container
        deque v1 = { 1, 2, 3 };
      
        // Declaring second container for
        // copying values
        deque v2 = { 4, 5, 6 };
      
        // Declaring a front_insert_iterator
        std::front_insert_iterator > front_i1(v2);
      
        // Using the iterator in the copy()
        std::copy(v1.begin(), v1.end(), front_i1);
        // v2 now contains 3 2 1 4 5 6
      
        // Displaying v1 and v2
        cout << "v1 = ";
      
        int i;
        for (i = 0; i < 3; ++i) {
            cout << v1[i] << " ";
        }
      
        cout << "\nv2 = ";
        for (i = 0; i < 6; ++i) {
            cout << v2[i] << " ";
        }
      
        return 0;
    }
    

    输出:

    v1 = 1 2 3
    v2 = 3 2 1 4 5 6
    
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”