gpt4 book ai didi

c++ - 从 std::list 中移除具有特定值的元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:02 28 4
gpt4 key购买 nike

我需要从 std::list 中删除具有特定值的元素。随着list<int>我使用了 remove() 方法。

现在我有 list<CMyClass>所以我想我应该使用 remove_if() 但它的谓词只需要一个参数 - 要测试的元素。

如何编写函数 foo(const CMyClass &Bad)从列表中删除所有等于 Bad 的元素?

谢谢

附言

struct CMyClass {
void *Ptr;
int Var;
}

bool is_equal(const CMyClass &A, const CMyClass &B)
{
if (A.Ptr == B.Prt and A.Var == B.Var)
return true;
else
return false;
}

最佳答案

你的类必须在你的类名中实现运算符 ==

bool operator == ( const Class& rhs );

然后你就可以使用了

list.remove( Bad )

如果您的类(class)使用运算符 == 是合理的(不只是用于删除)——那么 list::remove 是适合您的解决方案。 If operator == only for list::remove 比使用 remove_if 更好。

在下面的示例中演示了 list::remove 和 list::remove_if。

struct Class
{
int a_;
int b_;

Class( int a, int b ):
a_( a ),
b_( b )
{}

bool operator == (const Class &rhs)
{
return (rhs.a_ == a_ && rhs.b_ == b_);
}

void print()
{
std::cout << a_ << " " << b_ << std::endl;
}
};

bool isEqual( Class lhs, Class rhs )
{
return (rhs.a_ == lhs.a_ && rhs.b_ == lhs.b_);
}

struct IsEqual
{
IsEqual( const Class& value ):
value_( value )
{}

bool operator() (const Class &rhs)
{
return (rhs.a_ == value_.a_ && rhs.b_ == value_.b_);
}

Class value_;
};

int main()
{
std::list<Class> l;

l.push_back( Class( 1, 3 ) );
l.push_back( Class( 2, 5 ) );
l.push_back( Class( 3, 5 ) );
l.push_back( Class( 3, 8 ) );

Class bad( 2, 5 );

std::cout << "operator == " << std::endl;
l.remove( bad );
std::for_each( l.begin(), l.end(), std::mem_fun_ref( &Class::print ) );

std::cout << "binary function predicat" << std::endl;
l.push_back( Class( 2, 5 ) );
l.remove_if( std::bind2nd( std::ptr_fun(isEqual), bad ) );
std::for_each( l.begin(), l.end(), std::mem_fun_ref( &Class::print ) );


std::cout << "functor predicat" << std::endl;
l.push_back( Class( 2, 5 ) );
l.remove_if( IsEqual( bad ) );
std::for_each( l.begin(), l.end(), std::mem_fun_ref( &Class::print ) );

return 0;
}

关于c++ - 从 std::list 中移除具有特定值的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/677913/

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