如何检查find_if
是否找到了匹配项?当我尝试下面的代码时:
SparseMatrix& SparseMatrix::operator+=(const SparseMatrix &other)
{
vector<Node>::iterator itThis;
for (vector<Node>::const_iterator itOther = other._matrix.begin(); itOther != other._matrix.end(); ++itOther)
{
itThis = find_if(_matrix.begin(), _matrix.end(), position_finder(*itOther));
if(*itThis)
{
itThis->value += itOther->value;
} else
{
_matrix.push_back(*itOther);
}
}
return *this;
}
我到达if(*itThis)
:
could not convert ‘itThis.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Node*, _Container = std::vector<Node>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = Node&]()’ from ‘Node’ to ‘bool’
我知道itThis
是常数,所以我无法改变它的价值,但我想知道是否有匹配。
答案 0 :(得分:4)
来自http://en.cppreference.com/w/cpp/algorithm/find_if:
find_if( InputIt first, InputIt last, UnaryPredicate p )
...
返回值
迭代器满足条件的第一个元素,如果没有找到这样的元素,则为
last
。
答案 1 :(得分:4)
find_if将迭代器返回到容器中的任一元素或end()
,请参阅reference
您可以将itThis
与_matrix.end()
if( itThis != _matrix.end())
{
}
else
{
}
答案 2 :(得分:2)
如果找不到项find_if
,则返回等于_matrix.end()
的迭代器。
if (itThis == _matrix.end()) { ... }