gpt4 book ai didi

c++ - 你可以在 `std::remove_if` 的容器上使用 `std::unique_ptr` 吗?

转载 作者:IT老高 更新时间:2023-10-28 23:01:46 26 4
gpt4 key购买 nike

给定一个 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()resize() 一样,remove_if()移动 元素(可能通过交换),因此容器元素不需要是可复制的。 unique_ptr 没有什么特别之处,它只是另一种只能移动的类型。

正如您所指出的,谓词当然应该通过 const-reference 获取元素。同样,就像任何可移动类型一样。

关于c++ - 你可以在 `std::remove_if` 的容器上使用 `std::unique_ptr` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com