当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。