gpt4 book ai didi

c++ - 从 std::vector 中移除一个项目

转载 作者:行者123 更新时间:2023-11-30 02:00:33 25 4
gpt4 key购买 nike

在下面的第一个代码片段中,我试图根据馈入 std::remove 函数的静态条件函数从成员函数内的 vector 中删除一个元素。然后我在第二个片段中看到了很多模板错误。你能告诉我我错过了什么吗?

片段 1(代码)

void removeVipAddress(std::string &uuid)
{
struct RemoveCond
{
static bool condition(const VipAddressEntity & o)
{
return o.getUUID() == uuid;
}
};

std::vector<VipAddressEntity>::iterator last =
std::remove(
mVipAddressList.begin(),
mVipAddressList.end(),
RemoveCond::condition);

mVipAddressList.erase(last, mVipAddressList.end());

}

片段 2(编译输出)

 /usr/include/c++/4.7/bits/random.h:4845:5: note: template<class _IntType> bool      std::operator==(const std::discrete_distribution<_IntType>&, const   std::discrete_distribution<_IntType>&)
/usr/include/c++/4.7/bits/random.h:4845:5: note: template argument deduction/substitution failed:
In file included from /usr/include/c++/4.7/algorithm:63:0,
from Entity.hpp:12:
/usr/include/c++/4.7/bits/stl_algo.h:174:4: note: ‘ECLBCP::VipAddressEntity’ is not derived from ‘const std::discrete_distribution<_IntType>’
In file included from /usr/include/c++/4.7/random:50:0,
from /usr/include/c++/4.7/bits/stl_algo.h:67,
from /usr/include/c++/4.7/algorithm:63,
from Entity.hpp:12:
/usr/include/c++/4.7/bits/random.h:4613:5: note: template<class _RealType> bool std::operator==(const std::extreme_value_distribution<_RealType>&, const std::extreme_value_distribution<_RealType>&)
/usr/include/c++/4.7/bits/random.h:4613:5: note: template argument deduction/substitution failed:
In file included from /usr/include/c++/4.7/algorithm:63:0,
from Entity.hpp:12:
/usr/include/c++/4.7/bits/stl_algo.h:174:4: note: ‘ECLBCP::VipAddressEntity’ is not derived from ‘const std::extreme_value_distribution<_RealType>’

最佳答案

我猜你是在寻找 std::remove_if(),而不是 std::remove()

std::remove_if() 接受谓词作为它的第三个参数,并删除满足该谓词的元素。

std::remove() 将一个值作为第三个参数,并删除等于该值的元素。

编辑

要完成这项工作,您还必须将 RemoveCond 定义转换为谓词对象,因为它需要状态。像这样:

void removeVipAddress(std::string &uuid)
{
struct RemoveCond : public std::unary_function<VipAddressEntity, bool>
{
std::string uuid;

RemoveCond(const std::string &uuid) : uuid(uuid) {}

bool operator() (const VipAddressEntity & o)
{
return o.getUUID() == uuid;
}
};

std::vector<VipAddressEntity>::iterator last =
std::remove(
mVipAddressList.begin(),
mVipAddressList.end(),
RemoveCond(uuid));

mVipAddressList.erase(last, mVipAddressList.end());

}

关于c++ - 从 std::vector 中移除一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15025083/

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