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 ...
随机推荐
- 解决老浏览器不支持ES6的方法
转载地址:http://www.rockyxia.com/?p=669 为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使 ...
- 【Web技术】337- 秒懂 Web 缓存
点击上方"前端自习课"关注,学习起来~ 最近把前端缓存重新整理了一下,从整体的层面上把前端所有能用的缓存方案梳理了一遍.同时,对于http缓存,使用了表格的方案,使得原先晦涩难记的 ...
- java 反射的意义
具体的关于反射的介绍可以参考我的另外一篇博文<深入解析java反射>. 反射的意义是什么,其实就是为了代码简洁,提高代码的复用率,外部调用方便,源代码,反编译都能看到. 某些情况下解耦用反 ...
- Test 1022
T1 AERODROM (二分答案 TimeLimit: 1000MS Memory Limit: 32768KB \(N\)个登机口,办理登机业务,第\(i\)个窗口的单位办理时间为\(T_i\), ...
- Codeforces Round #599 (Div. 2)
久违的写篇博客吧 A. Maximum Square 题目链接:https://codeforces.com/contest/1243/problem/A 题意: 给定n个栅栏,对这n个栅栏进行任意排 ...
- 《Java基础知识》Java常量的申明和使用
常量就是从程序开始运行到结束都不变的量.在 Java 程序设计中,使用关键字“final”来声明一个常量,例如下面的程序代码. 这里的 x 是一个常量,但是是在某个方法内的常量,也可以称为成员常量(作 ...
- 《Java基础知识》Java instanceof 运算符
java多态性带来一个问题,就是如何判断一个变量所实际引用对象的类型.这里java帮我们引入了 instanceof 运算符. instanceof运算符用来判断一个变量的所引用对象的实际类型,注意是 ...
- C语言笔记 08_函数指针&回调函数&字符串&结构体&位域
函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: / ...
- mongodb 简单的增删改查
增加 语法: db.collectionName.insert({json对象}); 1. 增加单个文档,json对象格式 db.user.insert({name:'lee',age:23,sex: ...
- docker alphine 安装vim 等软件
alphine 不带 yum,所以只能用apt-get 安装 apt-get update apt-get install vim apt-get install net-tools