我有点困惑有关之间的差异push_back和emplace_back.
void emplace_back(Type&& _Val);
void push_back(const Type& _Val);
void push_back(Type&& _Val);
Run Code Online (Sandbox Code Playgroud)
因为有一个push_back超载采用右值参考我不太明白目的是emplace_back什么?
C++ 11向量具有新功能emplace_back.与push_back依赖于编译器优化以避免副本的情况不同,emplace_back使用完美转发将参数直接发送到构造函数以就地创建对象.在我看来,emplace_back一切都push_back可以做到,但有些时候它会做得更好(但从来没有更糟).
我有什么理由使用push_back?
我是C++的新手,我对它的库知之甚少.我需要对不同的排序算法进行时间分析,我需要以毫秒为单位获取当前时间.有没有办法做到这一点?
如果我有课
class foo {
public:
foo() { // spend some time and do something. }
private:
// some data here
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个foo的向量,我想把这个向量放到另一个向量中
vector<foo> input; // assume it has 5 elements
vector<foo> output;
Run Code Online (Sandbox Code Playgroud)
这两条线是否有任何性能差异?
output.push_back(input[0])
output.emplace_back(input[0])
Run Code Online (Sandbox Code Playgroud) 我只是存储一个节点列表,每个节点都包含一个指向它在列表中的位置的迭代器.然后我对插入和删除std列表和提升列表的节点进行基准测试.
包括
#include <iostream>
#include <memory>
#include <list>
#include <chrono>
#include "boost/container/list.hpp"
#include "boost/shared_ptr.hpp"
#include "boost/make_shared.hpp"
#define ONE_BILLION 1000000000
#define ONE_HUNDRED_MILLION 100000000
#define TEN_MILLION 10000000
#define ONE_MILLION 1000000
#define ONE_HUNDRED_THOUSAND 100000
#define TEN_THOUSAND 10000
Run Code Online (Sandbox Code Playgroud)
帮助函数打印插入或删除的平均持续时间
void print_duration(std::ostream &out, const std::string& str, const std::chrono::high_resolution_clock::duration &d)
{
out << str << ": ";
if (d < std::chrono::microseconds(10))
out << std::chrono::duration_cast<std::chrono::duration<float, std::nano>>(d).count() << " nano s";
else if (d < std::chrono::milliseconds(10))
out << std::chrono::duration_cast<std::chrono::duration<float, std::micro>>(d).count() << " micro s";
else if (d < …Run Code Online (Sandbox Code Playgroud)