向量與動態數組相同,具有在插入或刪除元素時自動調整自身大小的能力,其存儲由容器自動處理。
矢量::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:
// 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
算法
- 使用 emplace_back 函數向向量添加元素
- 檢查向量的大小是否為 0,如果不是,則將初始化為 0 的計數器變量遞增,並彈出返回元素。
- 重複此步驟,直到向量的大小變為 0。
- 打印變量的最終值。
// 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()
- push_back()將一個字符串複製到一個向量中。首先,將隱式創建一個新的字符串對象,並使用提供的 char* 進行初始化。然後 push_back 將被調用,它將使用移動構造函數將此字符串複製到向量中,因為原始字符串是一個臨時對象。然後臨時對象將被銷毀。
- 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。