STL——vector::emplace,emplace_back用法

  • Post author:
  • Post category:其他


如下代码解释:

// vector::emplace,emplace_back
#include <iostream>
#include <vector>
using namespace std;

class text{
private:
    string str;
public:
    text(string s):str(s){}
    void show()const{
        cout<<str<<endl;
    }

};

//emplace的用法 iterator emplace (const_iterator position, Args&&... args);
//在position位置插入一个元素,非常得注意,这个position是一个迭代器,并不是整型int
//在position位置插入一个元素后,原position后的元素都要一次后移一个位置
//返回指向新插入元素的迭代器
int main ()
{
    vector<int> res = {10,20,30};
 
    //int(错误,不能用int) it = res.emplace ( res.begin()+1, 100 );
    //emplace返回指向新插入元素的迭代器
    auto it = res.emplace ( res.begin()+1, 100 );
    res.emplace ( it, 200 );
    res.emplace ( res.end(), 300 );
 
    cout << "myvector contains:";
    //或者用for (auto& x: res)
    //或者用for (auto x: res)
    for (int x: res)
        cout << ' ' << x;
    cout << '\n';

//-------------------------------------------------------------
//-------------------------------------------------------------
    //emplace_back的用法
    //emplace_back和push_back的功能一样,但用emplace_back更好
    vector<text> vi;
    vi.emplace_back("Leo");
    vi.front().show();
    vi.emplace_back("Love");

    //这条push_back代码会报错没想到吧,为什么报错呢?
    //不用深究,是它背后的机制造成的
    //vi.push_back("Love");
    vi.back().show();

    return 0;
}

输出:

myvector contains: 10 200 100 20 30 300

Leo

Love



版权声明:本文为m0_52711790原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。