2017-02-12 6 views
0

У меня есть задание, над которым я работаю, у которого есть контур функции. Я должен вернуть позицию найденного элемента, если он найден или -1, если нет. Вот что очертание код:Использование алгоритма поиска

int linearSearch(const vector<int>& inputVec, int x) { 

, и я должен заполнить функции с использованием алгоритма find. Я понимаю, что find возвращает итератор. Я просто не уверен, как взять это и вернуть целое число, которое является позицией или -1. Прямо сейчас я пытаюсь это сделать внутри.

auto it = find(inputVec.begin(), inputVec.end(), x); 

и я не уверен, куда идти оттуда.

+1

Я сомневаюсь, что вы должны это так. Скорее всего, прямой линейный поиск будет намного быстрее. В любом случае, если вы абсолютно хотите его использовать с помощью 'std :: find', это дубликат [этого вопроса] (http://stackoverflow.com/questions/2152986/what-is-the-most-effective-way -в-получить по-индекс-в-ан-итератора-оф-ан-stdvector). – Paul

+1

Вы можете проверить диапазон между 'it' и' inputVec.begin() '. – Fureeish

ответ

2

можно сделать вручную зацикливание, как это:

for(int i=0;i<inputVec.size();i++) { 
    if(inputVec[i]==x) return i; 
} 
return -1; 

Или, если вы хотите использовать функции поиска():

auto it = find(inputVec.begin(), inputVec.end(), x); 
if(it==inputVec.end()) return -1; 
return it - inputVec.begin(); 
+0

Это, похоже, не использует алгоритм 'find' в соответствии с назначением. –

+0

if (it == inputVec.end()) return -1; else верните его - inputVec.begin(); – algojava

+0

Это выглядит лучше ... теперь проверьте его и добавьте в ответ. –

Смежные вопросы