我正在调查在以下成员函数中执行的特殊成员函数的执行次数vector:
insert
emplace
push_back
emplace_back
Run Code Online (Sandbox Code Playgroud)
在各种运行时间条件下.我的目的是发表一篇文章,将这些成员函数相互比较,并在std :: lib:libstdc ++,libc ++和vc ++的每个c ++ 11实现上进行比较,并提供关于何时最好的建议.使用每个成员函数(当可能有多个选项时).我有关于libc ++和libstdc ++ - 4.8的数据,但我缺乏关于vc ++的数据.
我正在寻找vc ++的答案,其中包括vc ++版本号(2010年,2012年,2013年).我的目的是就何时应该优先考虑这些成员的时间提供建议,并通过实际经验进行调整.我将对每个vc ++版本的第一个响应进行投票.我的意图不是打击任何特定的平台.但是,如果我的结果鼓励任何现有平台在未来改进,那么那就是肉汁.
测试我希望看到的结果是:
#include <iostream>
#include <vector>
class X
{
int i_;
int* p_;
public:
struct special
{
unsigned c;
unsigned dt;
unsigned cc;
unsigned ca;
unsigned mc;
unsigned ma;
};
static special sp;
X(int i, int* p)
: i_(i)
, p_(p)
{
// std::cout << "X(int i, int* p)\n";
sp.c++;
}
~X()
{
// std::cout << "~X()\n"; …Run Code Online (Sandbox Code Playgroud) 我需要存储一系列类型的元素ThirdPartyElm,我正在使用std::vector(或者std::array如果我需要一个固定大小的序列).
我想知道如何初始化序列.第一个版本创建一个新元素,并且(如果我是对的)在元素插入序列时创建元素的副本:
for (int i = 0; i < N; i++)
{
auto elm = ThirdPartyElm();
// init elm..
my_vector.push_back(elm); // my_array[i] = elm;
}
Run Code Online (Sandbox Code Playgroud)
第二个版本存储一系列指针(或更好的智能指针与c ++ 11):
for (int i = 0; i < N; i++)
{
std::unique_ptr<ThirdPartyElm> elm(new ThirdPartyElm());
// init elm..
my_vector.push_back(std::move(elm)); // my_array[i] = std::move(elm);
}
Run Code Online (Sandbox Code Playgroud)
哪个是最轻量级的版本?
请突出显示任何错误.