C++ std::vector emplace_back 优于 push_back 的理由
#include <iostream>
#include <vector>
#include <chrono>
#include <windows.h> using namespace std;
using namespace std::chrono; // 要考虑 copy ctor 和 copy opt= class Item
{
public:
Item() = delete; Item(const Item & ths); Item(std::string str); Item & operator = (const Item & ths); ~Item(); private: }; Item::Item(const Item & ths)
{
//cout << "copy ctor" << endl;
Sleep(2);
} Item::Item(std::string str)
{
//cout << str.c_str() << endl;
Sleep(2);
} Item & Item::operator=(const Item & ths)
{
//cout << "copy opt=" << endl;
Sleep(2);
} Item::~Item()
{
} int main()
{
{
auto tbegin = steady_clock::now();
std::vector<Item> vec8;
for (size_t i = 0; i < 2000; ++i)
vec8.push_back(Item("111")); auto used = duration_cast<milliseconds>(steady_clock::now() - tbegin);
std::cout << used.count() << "ms" << std::endl;
} {
auto tbegin = steady_clock::now();
std::vector<Item> vec8;
for (size_t i = 0; i < 2000; ++i)
vec8.emplace_back("222"); // 少一次 copy ctor 的调用 auto used = duration_cast<milliseconds>(steady_clock::now() - tbegin);
std::cout << used.count() << "ms" << std::endl;
} }

C++ std::vector emplace_back 优于 push_back 的理由的更多相关文章
- 你想知道的 std::vector::push_back 和 std::vector::emplace_back
引言 C++ 11 后,标准库容器 std::vector 包含了成员函数 emplace 和 emplace_back.emplace 在容器指定位置插入元素,emplace_back 在容器末尾添 ...
- emplace_back与push_back的区别
std::vector::emplace_back C++ Containers library std::vector template< class... Args &g ...
- 实战c++中的vector系列--知道emplace_back为何优于push_back吗?
上一篇博客说道vector中放入struct.我们先构造一个struct对象.再push_back. 那段代码中,之所以不能使用emplace_back,就是由于我们定义的struct没有显示的构造函 ...
- C++11 vector使用emplace_back代替push_back
C++11中,针对顺序容器(如vector.deque.list),新标准引入了三个新成员:emplace_front.emplace和emplace_back,这些操作构造而不是拷贝元素.这些操作分 ...
- std::vector push_back报错Access violation
C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include < ...
- 编程杂谈——std::vector与List<T>的性能比较
昨天在比较完C++中std::vector的两个方法的性能差异并留下记录后--编程杂谈--使用emplace_back取代push_back,今日尝试在C#中测试对应功能的性能. C#中对应std:: ...
- emplace_back() 和 push_back 的区别(转)
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...
- C++11使用emplace_back代替push_back
最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多. 首先,写 ...
- C++ std::vector
std::vector template < class T, class Alloc = allocator<T> > class vector; // generic te ...
随机推荐
- ARTS-S redis3.2.10通过ip访问
只用把配制文件里的bind 127.0.0.1改成0.0.0.0,然后重启即可.不用再有别的配制.
- springboot+k8s+抛弃springcloud.eureka
springboot开发微服务框架一般使用springcloud全家桶,而整个项目都是容器化的,通过k8s进行编排,而k8s自己也有服务发现机制,所以我们也可以抛弃springcloud里的eurek ...
- Django 07
目录 ORM查询优化 only与defer(单表) select_related与prefetch_related(跨表) choices参数 MTV与MVC模型 Ajax简介 前后端传输数据编码格式 ...
- newifi 1.6.13上运行mentohust方案
newifi最新版的固件,已经无法简单的root和开启ssh了,以下是本人的解决方案. 一·刷上pandorabox系统 1.系统可以到联想NBD社区下载:http://www.newbandeng. ...
- UWP GraphQL数据查询的实现
1. 缘起 Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 年开源,现已经在多种环境下可用,并被各种体量的团队所使用. 在这个链接可以看到更多 ...
- 吃透Python上下文管理器
什么是上下文管理器? 我们常见的with open操作文件,就是一个上下文管理器.如: with open(file, 'rb') as f: text = f.read() 那上下文管理器具体的定义 ...
- 添加junit和spring-test还是用不了@Test和@RunWith(SpringJUnit4ClassRunner.class)注解
pom.xml依赖如下 <!-- spring 单元测试组件包 --> <dependency> <groupId>org.springframework</ ...
- SAP中的数据库表索引
数据库表中的索引可以加快查询的速度.索引是数据库表字段的有序副本.附加的字段包含指向真实数据库表行的指针.排序可以使访问表行的速度变快,例如,可以使用二分搜索.数据库表至少有一个主索引,由它的key字 ...
- Java编译时常量和运行时常量
Java编译时常量和运行时常量 编译期常量指的就是程序在编译时就能确定这个常量的具体值. 非编译期常量就是程序在运行时才能确定常量的值,因此也称为运行时常量. 在Java中,编译期常量指的是用fina ...
- jumpserver 资产管理及授权
1.用户管理-添加[用户列表] 1.1点击创建用户 1.2创建用户 2.用户管理-添加[用户组] 2.1点击创建用户组 2.2创建用户组 3.资产管理添加资产 3.1添加节点 3.2添加资产(点击 ...