Ошибка std :: равная при компиляции с ключом -std = gnu ++ 11 - PullRequest
0 голосов
/ 03 мая 2018

Этот цикл прекрасно работает, когда я компилирую без ключа -std = gnu ++ 11. Если я скомпилирую с -std = gnu ++ 11, я получу следующую ошибку:

no match for call to '(__gnu_cxx::__normal_iterator<const float*, std::vector<float> >) (const float&, const float&)' if (!bool(__binary_pred(*__first1, *__first2))) 

Мой код:

for (auto it_A = std::begin(vector_A); it_A != std::end(vector_A); it_A += 4)
{
    bool found_in_B = false;
    for (auto it_B = std::begin(vector_B); !found_in_B && it_B != std::end(vector_B); it_B += 4)
    {
        found_in_B = std::equal(it_A, it_A + blockSize, it_B, it_B + blockSize);
    }
}

1 Ответ

0 голосов
/ 03 мая 2018

Вплоть до C ++ 14, std::equal занимает три итератора: два, описывающих первый диапазон, и один, описывающий начало второго диапазона. У него не будет причин использовать четвертый итератор, потому что оба диапазона должны быть одинаковой длины (опять же, до C ++ 14).

Версия с четырьмя итераторами была добавлена ​​в C ++ 14 и недоступна для выбранного варианта языка (этот флаг влияет на стандартную библиотеку, а не только на язык).

Поскольку длины диапазона всегда будут совпадать в вашем коде, вы можете просто удалить четвертый параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...