c++中emplace_back 和 push_back的区别

2020-10-14  本文已影响0人  VIELAMI

来源:http://c.biancheng.net/view/6826.html

#include <iostream>
#include <vector>
//c.biancheng.net/ref/sin.html)g namespace std;
int main()
{
    vector<int> values{};
    values.push_back(1);
    values.push_back(2);
    for (int i = 0; i < values.size(); i++) {
        cout << values[i] << " ";
    }
    return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{};
    values.emplace_back(1);
    values.emplace_back(2);
    for (int i = 0; i < values.size(); i++) {
        cout << values[i] << " ";
    }
    return 0;
}

emplace_back和push_back都有往容器后面插入一个元素的作用
不同的是
emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程

emplace_back()的用法 可以直接输入相应的构造函数
在leetcode1002中

    vector<string> commonChars(vector<string>& A) {
        vector<string> res;
        vector<int> freq(26,0);
        vector<int> minFreq(26,INT_MAX);

        for(int i = 0; i < A.size();i++){
            fill(freq.begin(), freq.end(),0);
            for(int j = 0; j < A[i].size();j++){
                freq[A[i][j] - 'a']++;
            }

            for(int i = 0; i < minFreq.size();i++){
                minFreq[i] = min(minFreq[i],freq[i]);
            }
        }

        for(int i = 0; i < minFreq.size();i++){
            for(int j = 0; j < minFreq[i];j++){
                res.emplace_back(1,i + 'a');
                //这里调用了string的构造函数
            }
        }

        return res;


    }
上一篇 下一篇

猜你喜欢

热点阅读