【STL】push 和 emplace区别
程序员文章站
2022-03-21 17:05:38
...
【STL】push 和 emplace区别
相信大家都知道push的作用,对数据进行插入;
往常大家都是怎么用push的呢?
对于内置数据类型大家是不是这样:
这里以stack来举例
stack<int> s1;
s1.push(1);//直接插入数据
int a=2;
s1.push(a);//变量a插入,这两种操作对于内置数据类型都可以
那么如果插入的数据类型是自定义数据类型呢?
class Person
{
public:
int m_age;
string m_name;
};
stack<Person> s2;
//对于这种自定义数据类型还能进行如下的插入操作吗?
s2.push(18,"貂蝉");❌
//答案是否定的
//若想用push进行插入,只能先将这个对象构造出来,再将这个对象插入
Person p1(18,"西施");✅
s2.push(p1);
//或
s2.push(Person(19,"杨玉环"))//传入时构造对象
那么emplace就可以说就是对此“不足”的补充。
对于emplace,C++标准库的简要说明就是构造和插入元素,emplace可以直接传入构造对象需要的元素,然后自己调用其构造函数!
//那么对于上述错误的push操作就可以用emplace来完成
s2.emplace(20,"张三"); //传入20,"张三"后,它会自己调用一遍Person得构造函数
//此问题发现于,做题需要,需要插入二维数组横纵坐标,想要简单的用pair来进行插入,如
queue<pair<int,int>> q;
q.push(1,1);❌
//得先构造对象
q.push(make_pair<int,int>(0, 0));
//就是想要简单的传入横纵坐标即可,不想有多余的操作,如下,使用emplace
q.emplace(1,1);✅
大概可以理解为push能做的,emplace都能做。
push是得传入得对象先得造好,再复制过去插入;而emplace则可以自己拿到构造对象所需得元素构造出来,直接插入即可。
emplace相比于push省去了复制这步,即使用emplace这种操作会更节省内存。
????:
- emplace_back(type) 对应 push_back(type)
- emplace(i, type) 对应 insert(type, i)
- emplace_front(type) 对应 push_front()
对于stack和queue这两种数据结构,插入只能push进行尾插,所以只有emplace这一种操作;
如有错误或不足欢迎指出。
上一篇: Pyplot基础教程
下一篇: JAVA - ArrayList
推荐阅读
-
C++ 中emplace_back和push_back差异
-
详解C++ STL vector容量(capacity)和大小(size)的区别
-
Vue中this.$router.replace和this.$router.push的区别
-
问题:在vue中this.$router.push怎么使用,query和params 有何区别?
-
vue中的$router.replace;$router.go和$router.push的区别
-
详解C++ STL vector容量(capacity)和大小(size)的区别
-
push_back()和emplace_back()函数
-
push_back与emplace_back之间的区别
-
C++11 之 emplace_back() 与 push_back() 的区别
-
c++11 之emplace_back 与 push_back的区别