c++Vector插入操作

c++Vector插入操作

老规矩mark,如有误,欢迎指正!
首先Vector容器有两个插入函数insert()和emplace(),实现在容器指定位置处插入元素。

insert()

insert()用来实现在vector指定位置插入一个或多个元素,有多个语法格式,如下表:
c++Vector插入操作_第1张图片
在这里需要注意的是,pos都是指在vector指定位置之前插入。
例子:

#include
#include
#include
using namespace std:
int main()
{
    std::vector<int> demo{1,2};
    //第一种用法
    demo.insert(demo.begin(),3);//{3,1,2}
    //demo.insert(demo.begin()+1,3);//{1,3,2}一定注意是在指定位置之前插入 
    
    //第二种用法
    demo.insert(demo.begin()+1,2,4);//{3,4,4,1,2}
    
    //第三种用法
    std::array<int,3>arraytest{5,6,7};
    demo.insert(demo.end(),arraytest.begin(),arraytest.end());//{3,4,4,1,2,5,6,7}

    //第四种用法
    demo.insert(demo.end(),{8,9,10});//{3,4,4,1,2,5,6,7,8,9,10}

    return 0
}

emplace()

emplace()是c++11洗澡能的成员函数,用于在vector容器指定位置之前插入一个新的元素,与insert()区别就是每次只能插入一个元素。
函数:

iterator emplace(const_iterator pos,args...)

例子:

#include 
#include 
using namespace std;

int main()
{
    std::vector<int> demo1{1,2};
    //emplace() 每次只能插入一个 int 类型元素
    demo1.emplace(demo1.begin(), 3);//{3,2,1}
    for (int i = 0; i < demo1.size(); i++) {
        cout << demo1[i] << " ";
    }
    return 0;
}

比较
emplace(): 只能移动一个元素;效率更高
insert():可以移动一个或者多个元素;效率不如emplace()

#include 
#include 
using namespace std;
class testDemo
{
public:
    testDemo(int num) :num(num) {
        std::cout << "调用构造函数" << endl;
    }
    testDemo(const testDemo& other) :num(other.num) {
        std::cout << "调用拷贝构造函数" << endl;
    }
    testDemo(testDemo&& other) :num(other.num) {
        std::cout << "调用移动构造函数" << endl;
    }

    testDemo& operator=(const testDemo& other);
private:
    int num;
};
testDemo& testDemo::operator=(const testDemo& other) {
    this->num = other.num;
    return *this;
}
int main()
{
    cout << "insert:" << endl;
    std::vector<testDemo> demo2{};
    demo2.insert(demo2.begin(), testDemo(1));

    cout << "emplace:" << endl;
    std::vector<testDemo> demo1{};
    demo1.emplace(demo1.begin(), 1);
    return 0;
}

参考:http://c.biancheng.net/view/6834.html

你可能感兴趣的:(C++,c++)