Преобразование векторных ссылок в С++

-7

Следующий код отказывается компилировать.

Компилятор жалуется на преобразование из векторной ссылки в указатель int, но я не понимаю, почему. Есть ли какое-то решение этой проблемы?

bool inSortedVectorHelper(int* front, int* back, int num)
{
if(front==back || front > back )
return false;

int* mid = front+(back-front)/2;
if((*mid) == num)
return true;

else if(num < (*mid))
return inSortedVectorHelper(front,mid-1,num);
else
return inSortedVectorHelper(mid+1,back,num);
}

bool inSortedVector(const std::vector<int> &sorted, int num)
{
int* front,back;
front = sorted.front();//both return references
back = sorted.back();

return inSortedVectorHelper(front, back, num);
}

Точный выход компилятора:

P5.cpp: In function ‘bool inSortedVector(const std::vector<int>&, int):
P5.cpp:62:9: error: invalid conversion from ‘__gnu_cxx::__alloc_traits<std::allocator<int> >::value_type {aka int} to ‘int* [-fpermissive]
front = sorted.front();//both return references
^
P5.cpp:65:47: error: invalid conversion from ‘int to ‘int* [-fpermissive]
return inSortedVectorHelper(front, back, num);
^
P5.cpp: In function ‘bool inSortedVector(const std::vector<int>&, int):
P5.cpp:62:9: error: invalid conversion from ‘__gnu_cxx::__alloc_traits<std::allocator<int> >::value_type {aka int} to ‘int* [-fpermissive]
front = sorted.front();//both return references
^
P5.cpp:65:47: error: invalid conversion from ‘int to ‘int* [-fpermissive]
return inSortedVectorHelper(front, back, num);

Я не могу поверить, что у меня возникают такие проблемы с простой функцией двоичного поиска, поэтому любая помощь оценивается. Благодарю!

спросил(а) 2015-09-24T21:51:00+03:00 4 года, 9 месяцев назад
0
55

Это должно работать без уродливого кода с помощью указателей:

bool inSortedVector(const std::vector<int> &sorted, int num)
{
return std::binary_search( sorted.begin(), sorted.end(), num );
}

если вы хотите повторно реализовать std::binary_search вы должны узнать, как он правильно реализован через контейнеры с использованием итераторов.

ответил(а) 2015-09-24T21:59:00+03:00 4 года, 9 месяцев назад
40

Вы хотите:

int *front, *back;
front = &sorted.front();
back = &(sorted.back()) + 1;

ответил(а) 2015-09-24T21:54:00+03:00 4 года, 9 месяцев назад
-4

front и back возвращают ссылки на int (как ваш комментарий). Ваши переменные - указатели. Вы должны написать:

int *front, *back;
front = &(sorted.front()); //both return references
back = &(sorted.back());

Кроме того, &(sorted.front()) эквивалентно sorted.data() для векторов non-bool.

ответил(а) 2015-09-24T21:57:00+03:00 4 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема