当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::back_inserter用法及代码示例


std::back_inserter构造一个back-insert迭代器,该迭代器在要应用它的容器的末尾插入新元素。它在头文件中定义。

back-insert迭代器是一种特殊的输出迭代器,其设计目的是使通常会覆盖元素(例如副本)的算法能够在容器的末尾自动插入新元素。

用法:


std::back_inserter (Container& x);

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

返回:A back_insert_iterator that inserts 
elements at the end of container x.
// C++ program to demonstrate std::back_inserter 
#include <iostream> 
#include <iterator> 
#include <vector> 
#include <algorithm> 
using namespace std; 
int main() 
{ 
    // Declaring first container 
    vector<int> v1 = { 1, 2, 3 }; 
  
    // Declaring second container for 
    // copying values 
    vector<int> v2 = { 4, 5, 6 }; 
  
    // Using std::back_inserter inside std::copy 
    std::copy(v1.begin(), v1.end(), std::back_inserter(v2)); 
    // v2 now contains 4 5 6 1 2 3 
  
    // 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 = 4 5 6 1 2 3

How is it helpful ?

  • 无需事先知道容器的大小:这种函数可能非常有用的一种情况是,当我们不知道容器的大小时,即要向其中插入多少个元素,因此一种方法是使容器非常大,但是在这种情况下,最有效的方法是使用std::back_inserter(),而无需声明容器的大小。
    // C++ program to demonstrate std::back_inserter 
    #include <iostream> 
    #include <iterator> 
    #include <vector> 
    #include <algorithm> 
    using namespace std; 
    int main() 
    { 
        // Declaring first container 
        vector<int> v1 = { 1, 2, 3 }; 
      
        // Declaring second container without specifying 
        // its size 
        vector<int> v2; 
      
        // Using std::back_inserter inside std::copy 
        std::copy(v1.begin(), v1.end(), std::back_inserter(v2)); 
        // v2 now contains 1 2 3 
      
        // 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 = 1 2 3
    

    说明:在这里,我们不得不将v1复制到v2,但是让我们说在某些情况下,我们不知道将多少元素复制到v2中,因此我们将不指定其大小,以后再使用std::back_inserter()复制到其中。

    为什么不使用v2.begin()代替back_inserter()?你们中许多人会认为为什么我们不使用v2.begin()代替std::back_inserter(v2),所以您需要重新考虑一下,因为我们没有声明v2的大小,因此,它,因此将没有开始,因此,v2.begin()将在此处引发错误。

要记住的要点:

  1. std::back_inserter的陷阱之一是它只能与那些具有push_back作为其方法之一的容器一起使用,例如在矢量,列表和双端队列的情况下。
  2. push_back()和back_inserter():现在,您可能会认为push_back()和back_inserter是相似的,但实际上并非如此。当您必须在算法中传递迭代器时,则应像上述情况一样使用back_inserter,而通常在容器末尾插入值时,可以使用push_back()。
  3. 代替使用std::back_inserter,我们可以创建back_insert_iterator,然后最终使用它,std::back_inserter仅返回back_insert_iterator。
    // C++ program to demonstrate back_insert_iterator 
    #include <iostream> 
    #include <iterator> 
    #include <vector> 
    #include <algorithm> 
    using namespace std; 
    int main() 
    { 
        // Declaring first container 
        vector<int> v1 = { 1, 2, 3 }; 
      
        // Declaring second container for 
        // copying values 
        vector<int> v2 = { 4, 5, 6 }; 
      
        // Declaring a back_insert_iterator 
        std::back_insert_iterator<std::vector<int> > back_i1(v2); 
      
        // Using the iterator in the copy() 
        std::copy(v1.begin(), v1.end(), back_i1); 
        // v2 now contains 4 5 6 1 2 3 
      
        // 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 = 4 5 6 1 2 3
    


相关用法


注:本文由纯净天空筛选整理自 std::back_inserter in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。