我需要对Element
的集合进行排序。排序Element*
的载体是否有任何特定的优点,即
std::vector<Element*> vectRef;
对Element
。
std::vector<Element> vect;
假设我相应地写了比较器。
Element
结构如下所示:
struct Element
{
Record *elm;
Element(Record *rec)
{
elm = new Record();
//...copy from rec
}
~Element()
{
delete elm;
}
};
答案 0 :(得分:2)
Element
的复制构造函数有多贵?它是否包含所包含的Record
对象的深层副本?排序vector<Element>
将需要许多Element
个对象的副本,除非swap
正确重载。我不确定sort
是否必须使用swap
以及是否必须使用用户的swap
重载版本的规则是什么; http://accu.org/index.php/journals/466有一些相关信息。排序vector<Element*>
只会复制指针,这可能会更便宜。假设Element
具有有效的移动构造函数和移动赋值运算符,C ++ 0x会更改此值。
答案 1 :(得分:0)
这取决于Element
s的复制方式。如上所示,Element
包含指向Record
的指针,但未定义复制构造函数。 如果这是正确的,复制Element
对象应该既便宜又快捷,所以通过存储指向Element
的指针,你可以获得很少或没有。
与此同时,我必须指出,执行浅拷贝很容易引入错误。当/如果您更改Element
进行深度复制时,您可能会从存储和排序指针而不是Element
对象中获得更多收益(但这取决于复制{{{}的成本。 1}})。