gpt4 book ai didi

c++ - find_if 无法检测到 vector 为空

转载 作者:行者123 更新时间:2023-11-27 23:14:48 24 4
gpt4 key购买 nike

<分区>

我想使用 find_if 中的 #include <algorithm>,但问题是它无法识别 vector 是否为空。

假设以下片段

typedef std::vector< std::pair<int , int > > myVector;
myVector aVector;
struct equal: std::unary_function< std::pair<int , int >,bool >
{
equal(const int &aNum) : theNum(aNum) {}
bool operator()(const std::pair<int , int > &arg) const { return arg.first == theNum; }
const int &theNum;
};
...

void check_and_insert(int num) {
myVector::iterator it = find_if( aVector.begin(), aVector.end(), equal(num));
if (it == aVector.end())
aVector.push_back( std::make_pair(num, 1) );
else
++dit->second;
}

假设 aVector 为空。我看到 find_if 的结果不是 aVector.end() 所以它转到 else 这是错误的。这是 find_if 的工作方式吗?这很奇怪,但我可以通过插入第一个元素来解决这个问题:

if (aVector.empty()) {
aVector.push_back( std::make_pair(num, 1) );
return;
}
// find_if...

这是唯一的解决方案吗?有什么更好的主意吗?

更新如评论中所述, find_if 工作正常。错误是 aVector 被另一个函数中的引用调用修改了。感谢所有帮助,抱歉打扰

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