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


C++ vector::emplace_back用法及代碼示例


向量與動態數組相同,具有在插入或刪除元素時自動調整自身大小的能力,其存儲由容器自動處理。

矢量::emplace_back()

該函數用於向vector容器中插入一個新元素,新元素被添加到vector的末尾。
用法:

vectorname.emplace_back(value)
參數:
The element to be inserted into the vector
is passed as the parameter.
Result:
The parameter is added to the
vector at the end position.

例子:

Input: myvector{1, 2, 3, 4, 5};
         myvector.emplace_back(6);
Output: myvector = 1, 2, 3, 4, 5, 6

Input: myvector{};
         myvector.emplace_back(4);
Output: myvector = 4

錯誤和異常:

  1. 它具有強大的異常保證,因此,如果拋出異常,則不會進行任何更改。
  2. 參數必須與容器的類型相同,否則會拋出錯誤。

範例1:




// INTEGER VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> myvector;
    myvector.emplace_back(1);
    myvector.emplace_back(2);
    myvector.emplace_back(3);
    myvector.emplace_back(4);
    myvector.emplace_back(5);
    myvector.emplace_back(6);
    // vector becomes 1, 2, 3, 4, 5, 6
  
    // printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
   
    return 0;
      
}

輸出:

1 2 3 4 5 6

範例2:


// STRING VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <vector>
#include <string>
using namespace std;
  
int main()
{
    // vector declaration
    vector<string> myvector;
    myvector.emplace_back("This");
    myvector.emplace_back("is");
    myvector.emplace_back("a");
    myvector.emplace_back("computer science");
    myvector.emplace_back("portal");
  
    // vector becomes This, is, a computer science, portal
  
    // printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
   
    return 0;
      
}

輸出:

This is a computer science portal

範例3:


// CHARACTER VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<char> myvector;
    myvector.emplace_back('a');
    myvector.emplace_back('c');
    myvector.emplace_back('x');
    myvector.emplace_back('y');
    myvector.emplace_back('z');
    // vector becomes a, c, x, y, z
  
    // printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
   
    return 0;
      
}

輸出:

a, c, x, y, z

時間複雜度:O(1)

應用:
給定一個空向量,使用 emplace_back 函數向其添加整數,然後計算其大小。

Input :1, 2, 3, 4, 5, 6
Output:6

算法

  1. 使用 emplace_back 函數向向量添加元素
  2. 檢查向量的大小是否為 0,如果不是,則將初始化為 0 的計數器變量遞增,並彈出返回元素。
  3. 重複此步驟,直到向量的大小變為 0。
  4. 打印變量的最終值。

// CPP program to illustrate
// Application of emplace_back function
#include <iostream>
#include <vector>
using namespace std;
   
int main()
{
    int count = 0;
    vector<int> myvector;
    myvector.emplace_back(1);
    myvector.emplace_back(2);
    myvector.emplace_back(3);
    myvector.emplace_back(4);
    myvector.emplace_back(5);
    myvector.emplace_back(6);
    while (!myvector.empty()) {
        count++;
        myvector.pop_back();
    }
    cout << count;
    return 0;
}

輸出:

6

emplace_back() 對比 push_back()

  1. push_back()將一個字符串複製到一個向量中。首先,將隱式創建一個新的字符串對象,並使用提供的 char* 進行初始化。然後 push_back 將被調用,它將使用移動構造函數將此字符串複製到向量中,因為原始字符串是一個臨時對象。然後臨時對象將被銷毀。
  2. emplace_back()就地構造一個字符串,因此不會創建臨時字符串,而是直接使用 char* 參數調用 emplace_back()。然後它會創建一個字符串來存儲在用這個 char* 初始化的向量中。因此,在這種情況下,我們避免構造和銷毀不必要的臨時字符串對象。

有關詳細信息,請參閱 C++ STL 中的 emplace 與插入。


// C++ code to demonstrate difference between
// emplace_back and insert_back
#include<bits/stdc++.h>
using namespace std;
    
int main()
{
    // declaring priority queue
    vector<pair<char, int>> vect;
        
    // using emplace() to insert pair in-place
    vect.emplace_back('a', 24);
        
    // Below line would not compile
    // vect.push_back('b', 25);    
        
    // using push_back() to insert
    vect.push_back(make_pair('b', 25));    
        
    // printing the vector
    for (int i=0; i<vect.size(); i++)
        cout << vect[i].first << " " << vect[i].second
             << endl;
   
    return 0;
}

輸出:

a 24
b 25



相關用法


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