我想使用find_if
from #include <algorithm>
,但问题是它无法识别向量是否为空。
假设以下代码段
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
由另一个函数中的引用调用修改的。感谢所有帮助,抱歉打扰