Невозможно присвоить возвращаемое значение std :: lower_bound в vector :: iterater - PullRequest
0 голосов
/ 31 января 2019

Передано в функцию: const std :: vector & xv:

std::vector<float>::iterator lowBound = lower_bound(xv.begin(), xv.end(), x);

Функция работала нормально, прежде чем я изменил std::vector<float>& на const std::vector<float>&

Lower_bound, возвращает синтаксисошибка во время компиляции:

no suitable user-defined conversion from "__gnu_cxx::__normal_iterator<const float *, std::vector<float, std::allocator<float>>>" to "__gnu_cxx::__normal_iterator<float *, std::vector<float, std::allocator<float>>>" exists
std::vector<...>::const_iterator std::lower_bound<std::vector<float, std::allocator<float>>::const_iterator, float>(std::vector<...>::const_iterator __first, std::vector<...>::const_iterator __last, const float &__val)

Я попытался изменить std::vector<float>::iterator на const std::vector<float>::iterator и также попытался std::vector<const float>::iterator.

Ни одна из этих опций не работает.

Прошу прощения за беспокойство, я попытался найти ошибку и не смог найти ответ.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Очевидно, я должен был использовать:

std::vector<float>::const_iterator вместо const std::vector<float>::iterator.

Не знал, что существует отдельный тип данных.

Итак, ответ: std::vector<float>::const_iterator

0 голосов
/ 31 января 2019

lower_bound возвращает const_iterator.Вам нужно

std::vector<float>::const_iterator lowBound = lower_bound(xv.begin(), xv.end(), x);

или просто (C ++ 11)

auto lowBound = lower_bound(xv.begin(), xv.end(), x);

Демо

...