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
广告