• 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;
    	}
    
    }
    

      

     

  • 相关阅读:
    java泛型
    跨域传递
    laravel的一些语法
    去重
    laravel的一些查询语句
    mysql把之前表单进行拆分
    Laravel5.1接收json数据
    thinkphp5 composer安装验证码
    关于地图经纬度的问题
    tp5分组查询
  • 原文地址:https://www.cnblogs.com/alexYuin/p/12031975.html
Copyright © 2020-2023  润新知