C++ vector::emplace() 函式



C++ `vector::emplace()` 函式用於在向量中指定位置插入新元素。每次插入元素,向量的容器大小都會增加一。當向量的實際大小大於其容量時,這可能會導致重新分配記憶體。`emplace()` 函式的時間複雜度為線性。

因為向量使用陣列作為其底層儲存。當插入元素的位置不是向量末尾時,容器需要將該位置之後的所有元素都向後移動一位。因此,`emplace()` 函式的複雜度為線性。

語法

以下是 C++ `vector::emplace()` 函式的語法:

iterator emplace (const_iterator position, Args&&... args);

引數

  • position − 指示在容器中插入新元素的位置。
  • args − 指示轉發給構造新元素的引數。

示例 1

讓我們考慮以下示例,我們將使用 `emplace()` 函式並將新元素插入到向量中。

#include <iostream>
#include <vector>

int main (){
   std::vector<int> tutorial = {11,22,33};
   auto a = tutorial.emplace ( tutorial.begin()+1);
   tutorial.emplace ( a, 44);
   std::cout << "Elements are:";
   for (auto& x: tutorial)
      std::cout << ' ' << x;
      std::cout << '\n';
   return 0;
}

輸出

編譯並執行上述程式後,將產生以下結果:

Elements are: 11 44 0 22 33

示例 2

考慮另一種情況,我們將透過向向量中新增字串來增加向量的長度。

#include <iostream>  
#include<vector>  
using namespace std;

int main(){  
   vector<string> myvector{"PORSCHE","BUCATI","BENTLY"};  
   myvector.emplace(myvector.begin()+1,"RS7");  
   for(int i=0;i<myvector.size();i++)  
      std::cout<< myvector[i] << " ";  
   return 0;  
}

輸出

執行上述程式後,將產生以下結果:

PORSCHE RS7 BUCATI BENTLY

示例 3

在下面的示例中,我們將嘗試在相同位置插入兩個不同的元素。

#include <iostream>
#include <vector>
using namespace std;

int main (){
   vector<int> tutorial{111,222,333,444};
   tutorial.emplace(tutorial.begin()+1, 555);
   tutorial.emplace(tutorial.begin()+1, 666);
   cout<<"Elements are: ";
   for(int i=0; i< tutorial.size(); i++)
      cout<<tutorial[i]<<" ";   
   return 0;
}

輸出

執行上述程式後,將產生以下結果:

Elements are: 111 666 555 222 333 444

示例 4

在以下示例中,我們將使用 `emplace()` 函式並將元素插入到向量的末尾。

#include <iostream>
#include <vector>
using namespace std;

int main (){
   vector<int> tutorial{111,222,333,444};
   tutorial.emplace(tutorial.end(), 555);
   cout<<"Elements are: ";
   for(int i=0; i< tutorial.size(); i++)
      cout<<tutorial[i]<<" ";   
   return 0;
}

輸出

執行上述程式後,將產生以下結果:

Elements are: 111 222 333 444 555
廣告