當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ std::inserter用法及代碼示例

std::inserter構造一個插入迭代器,該插入迭代器在從x指向的位置開始的連續位置將新元素插入x中。它在頭文件中定義。

插入迭代器是輸出迭代器的一種特殊類型,設計用於允許通常會覆蓋元素(例如副本)的算法代替自動在容器中的特定位置插入新元素。句法:

std::inserter(Container& x, typename Container::iterator it);
x:Container in which new elements will 
be inserted.
it:Iterator pointing to the insertion point.

返回:An insert_iterator that inserts elements into 
x at the position indicated by it.
// C++ program to demonstrate std::inserter 
#include <iostream> 
#include <iterator> 
#include <deque> 
#include <algorithm> 
using namespace std; 
int main() 
{ 
    // Declaring first container 
    deque<int> v1 = { 1, 2, 3 }; 
  
    // Declaring second container for 
    // copying values 
    deque<int> v2 = { 4, 5, 6 }; 
  
    deque<int>::iterator i1; 
    i1 = v2.begin() + 1; 
    // i1 points to next element of 4 in v2 
  
    // Using std::inserter inside std::copy 
    std::copy(v1.begin(), v1.end(), std::inserter(v2, i1)); 
    // v2 now contains 4 1 2 3 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 = 4 1 2 3 5 6 

How is it helpful ?

  • 在任何地方插入值:現在,試想一下,如果我們必須將值複製到向量之類的容器中,首先必須先移動元素然後進行複製,但是借助std::insert(),我們可以輕鬆地將其插入任何位置。
    // C++ program to demonstrate std::inserter 
    #include <iostream> 
    #include <iterator> 
    #include <vector> 
    #include <algorithm> 
    using namespace std; 
    int main() 
    { 
        // Declaring first container 
        vector<int> v1 = { 1, 2, 3, 7, 8, 9 }; 
      
        // Declaring second container 
        vector<int> v2 = { 4, 5, 6 }; 
      
        vector<int>::iterator i1; 
        i1 = v2.begin() + 2; 
        // i1 points to next element of 5 in v2 
      
        // Using std::inserter inside std::copy 
        std::copy(v1.begin(), v1.end(), std::inserter(v2, i1)); 
        // v2 now contains 4 5 1 2 3 7 8 9 6 
      
        // Displaying v1 and v2 
        cout << "v1 = "; 
      
        int i; 
        for (i = 0; i < 6; ++i) { 
            cout << v1[i] << " "; 
        } 
      
        cout << "\nv2 = "; 
        for (i = 0; i < 9; ++i) { 
            cout << v2[i] << " "; 
        } 
      
        return 0; 
    }

    輸出:

    v1 = 1 2 3 7 8 9
    v2 = 4 5 1 2 3 7 8 9 6
    

    說明:在這裏,我們開始將v1複製到v2中,但不是從頭開始,而是在v2的第二個位置之後,即5之後,因此將v1的所有元素都插入了5之後和6之前。珍惜我們想要的地方。

要記住的要點:

  1. std::inserter的陷阱之一是它隻能與那些將插入作為其方法之一的容器一起使用,例如在矢量,列表和雙端隊列等情況下。
  2. insert()和std::inserter():現在,您可能會認為insert()和std::inserter(是相似的,但事實並非如此。當必須在算法中傳遞迭代器時,則應像上述情況一樣使用inserter(),而通常在容器中插入值時,可以使用insert()。
  3. 代替使用std::inserter,我們可以創建一個insert_iterator,然後使用它,因為最終,std::inserter僅返回insert_iterator。
    // C++ program to demonstrate insert_iterator 
    #include <iostream> 
    #include <iterator> 
    #include <deque> 
    #include <algorithm> 
    using namespace std; 
    int main() 
    { 
        // Declaring first container 
        deque<int> v1 = { 1, 2, 3 }; 
      
        // Declaring second container for 
        // copying values 
        deque<int> v2 = { 4, 5, 6 }; 
      
        deque<int>::iterator ii; 
        ii = v2.begin() + 1; 
        // ii points after 4 in v2 
      
        // Declaring a insert_iterator 
        std::insert_iterator<std::deque<int> > i1(v2, ii); 
      
        // Using the iterator in the copy() 
        std::copy(v1.begin(), v1.end(), i1); 
        // v2 now contains 4 1 2 3 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 = 4 1 2 3 5 6
    


相關用法


注:本文由純淨天空篩選整理自 std::inserter in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。