c++Vector插入操作
老规矩mark,如有误,欢迎指正!
首先Vector容器有两个插入函数insert()和emplace(),实现在容器指定位置处插入元素。
insert()
insert()用来实现在vector指定位置插入一个或多个元素,有多个语法格式,如下表:
在这里需要注意的是,pos都是指在vector指定位置之前插入。
例子:
#include<iostream>
#include<vector>
#include<array>
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 <vector>
#include <iostream>
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 <vector>
#include <iostream>
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