2

您如何检查是否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是一个常数,所以我不能改变它的值,但我想知道是否有匹配。

4

3 回答 3

4

来自http://en.cppreference.com/w/cpp/algorithm/find_if

find_if( InputIt first, InputIt last, UnaryPredicate p )

...

返回值

迭代到满足条件的第一个元素,或者last如果没有找到这样的元素。

于 2013-01-16T01:14:02.533 回答
4

find_if 将迭代器返回到容器中的任一元素或返回到end(),请参阅参考

你可以itThis 比较_matrix.end()

if( itThis != _matrix.end())
{
}
else
{
}
于 2013-01-16T01:14:10.420 回答
2

如果未找到项目,则find_if返回等于 的迭代器_matrix.end()

if (itThis == _matrix.end()) { ... }
于 2013-01-16T01:14:53.317 回答