给定一个std::vector<std::unique_ptr<SomeType> >
, 使用是否合法remove_if
在上面?换句话说,给定以下代码:
std::vector<std::unique_ptr<SomeType> > v;
// fill v, all entries point to a valid instance of SomeType...
v.erase( std::remove_if( v.begin(), v.end(), someCondition ), v.end() );
,我能保证擦除后所有指针仍然存在吗v
是
有效的。我知道鉴于直观的实现std::remove_if
,考虑到我看过的所有实现,
他们会。我想知道标准里有没有什么内容
这保证了它;即那个std::remove_if
不允许复制
任何有效条目,无需将副本重新复制到最终版本中
地点。
(当然,我假设条件不能复制。如果
条件的签名如下:
struct Condition
{
bool operator()( std::unique_ptr<SomeType> ptr ) const;
};
,那么当然,之后所有的指针都会失效remove_if
.)
就像erase()
and resize()
, remove_if()
will move元素(可能通过交换),因此容器元素不需要是可复制的。没什么特别的unique_ptr
,这只是另一种仅移动类型。
正如您所指出的,谓词当然应该通过常量引用获取元素。再次强调,就像任何活字印刷一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)