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 に答える